我尝试了一个简单的c程序从包含学生姓名和分数的文件中读取数据,我想计算学生的总分数。执行我的代码时,输出显示为total = 0。下面是我的代码:
#include<stdio.h>
int main(){
FILE *file1;
file1 = fopen("detail.txt","r");
int marks, total = 0;
while(fscanf(file1,"%d",&marks)!= EOF){
total = total + marks;
}
printf("Total = %d\n",total);
fclose(file1);
}
这是我的包含数据的文件:
john 25
Malik 78
smith 85
irik 85
hales 98
您还需要阅读字符串。否则,您将在第一次调用john
时尝试将字符串fscanf
读取为十进制整数,它将以return zero(不是EOF
)的形式出现。
并且由于fscanf
调用未能解析具有%d
格式的第一个字符串,所以输入文件指针不前进,因此对fscanf
的下一次调用将尝试读取和解析字符串john
再次并失败。等等等等……永远。
如果不需要,您可以丢弃该字符串,可以通过fscanf
格式字符串本身来完成:
fscanf(file1, "%*s %d", &marks)
如this scanf
(and family) reference星号scanf
是分配抑制运算符,它读取和解析格式,但不分配给变量。
如果*
调用成功,它将返回fscanf
,最好在循环条件下进行检查。