用c语言编写东西 为什么程序会停止工作?

2024年11月19日 18:19
有5个网友回答
网友(1):

  这种情况叫做 runtime error (运行时错误)。


  在 Windows 7 上这样提示:

  在 Windows XP 上这样提示:

  runtime  error (运行时错误)就是程序运行到一半,程序就崩溃了。

  比如说:

  ①除以零

  ②数组越界:int a[3]; a[10000000]=10;

  ③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;

  ④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;

  ⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000]

网友(2):

程序停止响应,是因为你的内存出现非法读写操作
请检查你的代码所有关于内存读写的地方

不能用下标 10 读取数组 x1 的内容,这样子会导致数组上标越界
你只能使用 0 - 9 来读取数组 x1 的内容

网友(3):

#include 
#include 

#define ITEMS 3
#define MAX   3

typedef struct {
char name[30];
double grades[ITEMS + 2];
}student;

char coursename[ITEMS + 2][10] = {"英语","数学","编程","平均成绩","总成绩"};

double AverageStudent(student stu[], int n,char name[]) {
int i;
for(i = 0; i < n; ++i) {
if(strcmp(stu[i].name,name) == 0)
return stu[i].grades[ITEMS - 1 + 1];
}
return 0.0;
}

double AverageCourse(student stu[], int n, char curname[]) {
int i,order = -1;
double sum = 0.0;
for(i = 0; i < ITEMS; ++i) {
if(strcmp(coursename[i],curname) == 0) {
order = i;
break;
}
}
if(order == -1) return 0.0;
for(i = 0; i < n; ++i)
sum += stu[i].grades[order];
if(n > 0) return sum/n;
return 0.0;
}

int main() {
student stu[MAX];
int i,j;
for(i = 0; i < MAX; ++i) {
stu[i].grades[ITEMS + 1] = 0.0;
printf("(%d/%d)名学生数据:\n",i + 1,MAX);
fflush(stdin);
scanf("%s",stu[i].name);
for(j = 0; j < ITEMS; ++j) { // 读入各科成绩
scanf("%lf",&stu[i].grades[j]);
stu[i].grades[ITEMS + 1] += stu[i].grades[j]; // 总分累计
}
stu[i].grades[ITEMS - 1 + 1] = stu[i].grades[ITEMS + 1]/ITEMS; // 计算平均分
}
for(i = 0; i < ITEMS; ++i) // 显示各科平均成绩
printf("%s平均分:%.2lf\n",coursename[i],AverageCourse(stu,MAX,coursename[i]));
return 0;
}

网友(4):

scanf("%s",name[10]); 改成scanf("%s",&name[10]);
scanf("%s",course[5]);改成scanf("%s",course);
printf("%s",name[i]);改成printf("%c",name[i]);
printf("%s",course[i]);改成printf("%c",course[i]);

网友(5):

代码没贴出来,,