[英]How to sum numbers from file in C
我试图通过将数字存储在数组中来求和文件中的所有数字,然后求和数组元素。 但是,编译器说
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个以上的元素怎么办? 为什么不从文件中读取值时就添加总和?
编译器又大又复杂。 有时他们有错误。 有时,错误会导致它们访问不应访问的内容(例如,由4个元素组成的数组中的第十个元素),有时,CPU /内核/ OS会检测到该错误,并导致SIGSEGV
或“总线错误”。
它永远都不会发生(编译器不应该有错误)。 和(即使您尝试编译“ / dev / random”),它也应该正确编译或正确告诉您为什么它无法编译(并且永远不会崩溃,也永远不要告诉您它有内部编译器错误)。
解决问题; 检查是否有较新版本的编译器,是否没有将错误报告给编译器开发人员,是否没有将错误报告给编译器开发人员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.