在c程序中读取文件时如何区分整型变量

在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

我试着用一个简单的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);
}

您还需要读取字符串。否则,在第一次调用
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
,最好检查循环中的条件