我试图通过将数字存储在数组中来对文件中的所有数字求和,然后对数组元素求和。 然而,编译器说
during RTL pass: ira
/home/ubuntu/CLionProjects/printnum/main.c: In function ‘main’:
/home/ubuntu/CLionProjects/printnum/main.c:32:1: internal compiler error: Bus error
}
^
cc: internal compiler error: Bus error signal terminated program cc1
出了什么问题?
int main(int argc, char *argv[])
{
FILE *fp;
double tmp;
double num[10],sum;
int count = 0,i;
fp = fopen("numbers.txt", "r");
if (fp != NULL)
{
while (fscanf(fp, "%lf", &tmp) != EOF)
{
num[count++] = tmp;
}
}
else {
printf("xxxxxxx");
}
for ( i = 0 ; i <= sizeof(num);i++) {
sum += num[i];
printf("%lf", sum);
}
fclose(fp);
}
最佳答案
几个问题:
sizeof(num)
计算结果为num
中的字节数,而不是元素的数量。要获取元素的数量,您可以使用sizeof num / sizeof num[0]
。或者,使用符号常量(宏或枚举常量)作为数组大小。C 中的数组索引范围为 0 到 N-1,因此您需要使用
i < sizeof num / sizeof num[0]
,不是<=
.sum
在开始添加之前需要初始化为 0。
在计算总和之前,您想要将值存储在数组中是否有任何特殊原因?如果您的文件包含超过 10 个元素怎么办?为什么不在从文件中读取值时直接添加总和呢?
关于c - 如何用C语言对文件中的数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749733/