一个c语言程序,请你输入两个数,然后这两个数和已知的那个数组里的数相加,将超过定值的数组号显示出来

程序一运行,输入两个数就秒退,求大神帮忙,我用的vs,谢谢

#include "stdafx.h"
#include <stdio.h>
int max(int a, int b, int c);
int min(int a, int b, int c);

void main()
{
int x, y;
printf("请输入两个成绩:");
scanf_s("%d%d", &x, &y);
double a[100] = { 90.8, 90.8, 90.367, 89.567, 89.533, 89.375, 89.333, 89.3, 89.267, 89.233, 89.133, 88.933, 88.885, 88.3, 88.3, 88.185, 88.133, 87.833, 87.8, 87.767, 87.467, 87.335, 87.167, 87.067, 86.833, 86.707, 86.6, 86.6, 86.575, 86.507, 86.467, 86.467, 86.462, 86.367, 86.285, 86.267 };
for (int i = 36; i > 0; i--)
{
if (x + y + a[i] > 86.17)
{
printf("另一组的序号%d\n", i);
}

}
}

第1个回答  2014-08-19
这个VC6.0和vs区别 你在最后加个system(“pause”);试试!再有就是你那数组在你初始化的36个数的基础上越界了,你一共给了0-35共36个数,上来你就用了个[36],虽然没错 , 但是不知道是不是你本意!你试试下面这个:
include <stdio.h>
#include "windows.h"
int main()
{
int x, y;
printf("请输入两个成绩:");
scanf_s("%d%d", &x, &y);
double a[100] = { 90.8, 90.8, 90.367, 89.567, 89.533, 89.375, 89.333, 89.3, 89.267, 89.233, 89.133, 88.933, 88.885, 88.3, 88.3, 88.185, 88.133, 87.833, 87.8, 87.767, 87.467, 87.335, 87.167, 87.067, 86.833, 86.707, 86.6, 86.6, 86.575, 86.507, 86.467, 86.467, 86.462, 86.367, 86.285, 86.267 };
for (int i = 35; i >= 0; i--)
{
if (x + y + a[i] > 86.17)
{
printf("另一组的序号%d\n", i);
}
}
system("pause");
return 0;
}
第2个回答  2014-08-19
int x, y;
printf("请输入两个成绩:");
scanf_s("%d%d", &x, &y); 这部分 改成double会更好。

for(int i=0;i<100;i++)循环条件这样写好点。printf("另一组的序号%d\n", i); %d还是%f自己考虑一下追问

治标不治本啊,黑框框出来后,当我输入之后,看见黑框框出来一堆数据,可是瞬间对话框就没了

追答

你代码本来就达不到你要的意思。 对话框没有是你设置问题。 代码最后加个system("pause");

这函数要用好像还得加个头文件 自己查查吧。 或者直接在return 0;前加句getchar();

本回答被提问者采纳
第3个回答  2014-08-19
scanf_s("%d%d", &x, &y);这个函数在你输入两个数后,已经赋值给x、y了,所以xy最大不会超过9,下边的判断顺序执行完成36个遍历,而且没有满足条件的,所以退出了。这不是闪退,是正常执行。你可以打印出来x、y值确认下。总感觉获取xy的函数有点问题。
第4个回答  2014-08-19
double a[100]里总共36个已经赋值的元素(数得我眼睛快瞎了@@)

C语言数组下标从0开始,而你的i开始就是36,a[36]是第37个元素,值默认为0

退出的原因是
scanf_s()在调用时,必须提供一个数字以表明最多读取多少位字符。
第5个回答  2014-08-19
楼主你的代码完整吗?
#include "stdafx.h"把这个删除就可以运行,我用的VS2013ultimate
相似回答