是的,我创建了一个程序,该程序将从一些不同文件中的一行获取内容并对它们求和,并将总和打印到屏幕上,然后继续获取下一行,如下所示。
#include<stdio.h>
#include<conio.h>
void addscores(void);
FILE *faa;
FILE *fab;
FILE *fac;
int DataCount=0;
int total=0;
struct store3
{
int def3;
}stock3[128];
int main()
{
addscores();
}
void addscores(void)
{
do
{
total=0;
faa=fopen("Test 01 Scores.txt","r");
fscanf(faa,"%d", &stock3[DataCount].def3);
fclose(faa);
total=total+stock3[DataCount].def3;
fab=fopen("Test 02 Scores.txt","r");
fscanf(fab,"%d", &stock3[DataCount].def3);
fclose(fab);
total=total+stock3[DataCount].def3;
fac=fopen("Test 03 Scores.txt","r");
fscanf(fac,"%d", &stock3[DataCount].def3);
fclose(fac);
total=total+stock3[DataCount].def3;
printf("Total = %d\n",total);
DataCount=DataCount+1;
getch();
}
while(!feof(faa));
getch();
}
但是,出现了一个问题,程序在完成第一次循环后不会读取文件的第 2、3...n 行,因此程序只会打印与第一行相同的和。
忽略无限循环(稍后可以修复)我该如何解决这个问题?
旁注:请原谅我臭名昭著的 while(!EOF) 使用
文件内容:
1
2
3
4
5
预期输出
3
6
9
12
15
实际输出
3
3
3
3
3
3
3
3
3
3
3
3
...
...
谢谢,已修复:D
最佳答案
由于您在每次迭代中打开和关闭文件,因此您始终读取每个文件的第一行。这就是这两个问题的原因:您会陷入无限循环,因为您永远不会到达 EOF 并且您总是对第一行中的条目进行求和。您应该在循环进入之前打开所有文件,然后关闭它们。您还应该检查是否至少有一个文件已达到 EOF(不仅是第一个文件),以便在它们具有不同长度时捕获这种情况,并将检查移动到循环的开头(如果文件为空)。
关于c - 添加分数的程序不会从 C 的每一行中获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22993901/