当你运行下面的C代码时,你几乎每次都会得到不同的结果(没有一个是完全正确的)。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int s[10][4]={{202201,90,13,21},{202202,32,24,12},{202203,23,53,76},{202204,21,43,64},{202205,12,45,89},{202206,98,99,100},{202207,12,0,0},{202208,0,0,0},{202209,98,12,34},{202210,23,65,34}};
int ave[10],sum[10];
printf("No. MA EN CN\n");
for(i=0;i<10;i++)
{
for(j=0;j<4;j++)
printf("%4d",s[i][j]);
printf("\n");
}
for(i=0;i<10;i++)
{
for(j=1;j<4;j++)
sum[i]=s[i][j]+sum[i];
printf("%d\n",sum[i]);
}
return 0;
}
发生了什么事?它背后的机制是什么?我该如何修复它?
2条答案
按热度按时间2w2cym1i1#
sum
和ave
都是未初始化的数组。这意味着当你累加s[i]
时,你的第一次加法是一个未初始化的值,它会调用未定义的行为。这里你只是得到一个随机但有效的值。您需要确保在首次使用
s[i][j]
之前将其初始化为0:或:
9udxz4iz2#
最有可能的问题就在这句话里。
“sum”整数数组在执行此语句之前尚未初始化,因此语句右侧的值“sum[i]”可能包含未定义的数据。请初始化sum数组,或者在出现其他类型的求值时修改语句。