我正在阅读一个数字文本文件,我想得到这个数字的总和,我如何确定文本文件中的数字数。“我的文本文件由一行组成”
这是我编写的代码,如何确定文本文件中的数字而不是代码的第二行中的变量“数字数”
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;
}
答案 0 :(得分:4)
如果您想这样做,有三种可能的解决方案:
integers
相当大(比如说10000个元素)并说“太多数字”,如果有超过“非常大”的数字。realloc
分配更大的数组,直到读取所有数字。 但是,在您的特定情况下,您可以在不存储数字的情况下完成所做的工作。因此,整个integers
数组完全没必要。
只是做:
sum += num;
在第一个循环中。
答案 1 :(得分:4)
首先,弄清楚你是否真的需要保存每个号码。通常可以通过计算一些中间结果来进行简单的数据处理,而无需保留每个输入。例如,可以在不保留输入数据集的情况下计算输入集的均值和标准差。
在您的具体示例中,您可以在阅读时打印每个数字,然后将其累积到sum
,而不必保留所有数字。
如果您确定需要保留每个号码,那么您有两个选择:
fseek
回到开头读取所有数字。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;
所以你最终得到它。