c - 如何用C语言对文件中的数字求和

标签 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 个元素怎么办?为什么不在从文件中读取值时直接添加总和呢?

关于c - 如何用C语言对文件中的数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749733/

相关文章:

c - 如何从输入文件中分离/解码二进制字符串? (C)

c - 如何找到数组中整数和数字之间的两个最接近的差异

c - C 中的 strcpy 和 strcat 函数

我们可以用 GCC 的内联函数来做到这一点吗?

c - 将字符串的数字相乘

c - 同步访问双向链接列表

c - 使用霍夫变换找直线,还需要跟踪在这些直线上找到的点

c - 没有将分配内存的实际大小获取到指针

我可以在 scanf 中放入 for 循环吗?

c - 在 C 中使用具有相同标志的 fopen 打开文件