如何确定C中文本文件中的数字数量

时间:2013-08-24 21:32:06

标签: c

我正在阅读一个数字文本文件,我想得到这个数字的总和,我如何确定文本文件中的数字数。“我的文本文件由一行组成”

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

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;
}

3 个答案:

答案 0 :(得分:4)

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

  1. 使integers相当大(比如说10000个元素)并说“太多数字”,如果有超过“非常大”的数字。
  2. 两次读取文件,第一次计算数字,第二次存储它们。
  3. 使用动态分配,并从较小的数字开始,当达到该数字时,使用realloc分配更大的数组,直到读取所有数字。
  4. 但是,在您的特定情况下,您可以在不存储数字的情况下完成所做的工作。因此,整个integers数组完全没必要。

    只是做:

     sum += num; 
    

    在第一个循环中。

答案 1 :(得分:4)

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

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

如果您确定需要保留每个号码,那么您有两个选择:

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

答案 2 :(得分:1)

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

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

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

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

修改 如果在某些情况下你需要做一个avarage,因此你真的需要你读的数字总数,只需声明一个int n = 0;并在循环内做++n;所以你最终得到它。