2

我正在读取一个数字文本文件,我想得到这个数字的总和,我怎样才能确定文本文件中的数字数量。“我的文本文件由一行组成”

这是我写的代码,如何确定文本文件中的数字数量,而不是第二行代码中的变量“数字数量”

int main()
{
    FILE *file = fopen("numbers.txt", "r");
    int integers[number of numbers];
    int i=0;
    int j=0;
    int num;

    while(fscanf(file, "%d", &num) > 0) {
        integers[i] =num;
        printf("%d",integers[i]);
        printf("\n");
        i++;
    }

    int sum=0;
    for(j=0;j<sizeof(integers)/sizeof(int);j++)
    {
        sum=sum+integers[j];
    }

    printf("%d",sum);
    printf("\n");
    fclose(file);
    return 0;
}
4

3 回答 3

4

如果你想这样做,有三种可能的解决方案:

  1. 制作integers相当大(比如 10000 个元素),如果数量超过“相当大”的数字,则说“数字太多”。
  2. 读取文件两次,第一次计算数字的数量,第二次存储它们。
  3. 使用动态分配,并从一个小数字开始,当达到该数字时使用realloc分配一个更大的数组,直到所有数字都被读取。

但是,在您的特定情况下,您可以在完全不存储数字的情况下完成您正在做的事情。所以,整个integers数组是完全没有必要的。

做就是了:

 sum += num; 

在第一个循环中。

于 2013-08-24T21:40:43.857 回答
4

首先,弄清楚您是否真的需要保存每个数字。经常可以通过计算一些中间结果来进行简单的数据处理,而无需保留每个输入。例如,可以在不保留输入数据集的情况下计算输入集的均值和标准差。

在您的具体示例中,您可以在读取每个数字时打印它,然后将它们累积到sum中,而不必保留所有数字。

如果您决定确实需要保留每个数字,那么您有两种选择:

  1. 通读一次文件以计算数字的数量,然后分配数组,然后fseek回到开头读取所有数字。
  2. 分配一个初始数组,然后使用realloc它逐渐增加其大小(在这种情况下,确保在需要时将大小增加一个固定因子,而不是仅仅增加一个大小)。
于 2013-08-24T21:41:26.343 回答
1

如果您不需要单个数字而只需要所有数字的总和,那么您应该在阅读它们的同时将它们加在一起:

int sum = 0;
int num;
while(fscanf(file, "%d", &num) > 0) {
    sum += num;
    printf("%d",num);
    printf("\n");
}

另一方面,如果你真的需要保留每一个数字,你可以用不同的方式来做。

  • 您可以在计算数字时首先读取文件,然后寻找开头,分配所需的内存并再次读取并保存每个数字。
  • 一开始你可以请求一些内存,当你用完时(你将不得不跟踪你有多少可用空间)请求更多内存(realloc),并继续这样做直到你完成。
  • 如果您不需要随机访问,则可以使用链表而不是数组。

编辑: 如果在某些情况下你需要做一个平均,因此你真的需要你阅读的数字总量,只需声明 aint n = 0;并在循环内这样做++n;,你就可以得到它。

于 2013-08-24T21:43:24.557 回答