我已经编写了下面的代码来从文本文件中读取一些值,然后找到这些数字的平均值,但由于某些原因,当它在while循环中时,它不会看到文件结束并继续将它们永远添加到一起。如果你能告诉我为什么会这样,以及我如何摆脱它,我真的很感激。谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(){
int total, grade, n;
float a;
total = 0;
n = 0;
FILE *file;
file = fopen("grades.txt", "r");
if( (file = fopen("grades.txt", "r")) == NULL) {
puts("Error");
exit(0);
}
while (!(feof(file))) {
if (!(fscanf(file, "%d",&grade) ==-1 )){
total = total + grade;
n++;
printf("%d\n", total);
}
else {
break;
}
}
fclose(file);
a = total / n;
printf("The average is %f", a);
getch();
}
答案 0 :(得分:3)
您的代码处理文件末尾没有问题,但它有另一个问题,它阻止循环终止:当scanf返回零时,因为没有有效的输入要处理,循环继续运行。< / p>
当scanf返回1以外的任何值时,更改条件以停止循环以解决此问题。
答案 1 :(得分:0)
更改if(!(fscanf(file,“%d”,&amp; grade)== - 1)) if(fscanf(file,“%d”,&amp; grade)== 1)并尝试一下。 或者做出其他条件 if(等级== -1) 打破;