在c程序中读取文件时如何区分整型变量
我试着用一个简单的c程序从一个包含学生姓名和分数的文件中读取数据,我想计算学生的总分数。执行我的代码时,输出显示为total=0。 下面是我的代码:在c程序中读取文件时如何区分整型变量,c,file-handling,C,File Handling,我试着用一个简单的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){ tot
#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);
}
您还需要读取字符串。否则,在第一次调用
fscanf
时,您将尝试将字符串john
作为十进制整数读取,它将为零(而不是EOF
)
由于fscanf
调用未能使用%d
格式解析第一个字符串,因此输入文件指针不会前进,因此对fscanf
的下一次调用将再次尝试读取和解析字符串john
,并失败。等等等等等等。。。永远
如果不需要字符串,可以丢弃它,这可以在fscanf
格式化字符串本身中完成:
fscanf(file1, "%*s %d", &marks)
如中所述,星号*
是一个赋值抑制运算符,它读取和解析格式,但不赋值给变量
如果
fscanf
调用成功,它将返回1
,最好检查循环中的条件。您还需要读取字符串。否则,在第一次调用fscanf
时,您将尝试将字符串john
作为十进制整数读取,它将为零(而不是EOF
)
由于fscanf
调用未能使用%d
格式解析第一个字符串,因此输入文件指针不会前进,因此对fscanf
的下一次调用将再次尝试读取和解析字符串john
,并失败。等等等等等等。。。永远
如果不需要字符串,可以丢弃它,这可以在fscanf
格式化字符串本身中完成:
fscanf(file1, "%*s %d", &marks)
如中所述,星号*
是一个赋值抑制运算符,它读取和解析格式,但不赋值给变量
如果fscanf
调用成功,它将返回1
,最好检查循环中的条件