繁体   English   中英

如何在C中对文件中的数字求和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM