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

问题描述 投票:0回答:1

我尝试了一个简单的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
c file-handling
1个回答
1
投票

您还需要阅读字符串。否则,您将在第一次调用john时尝试将字符串fscanf读取为十进制整数,它将以return zero(不是EOF)的形式出现。

并且由于fscanf调用未能解析具有%d格式的第一个字符串,所以输入文件指针不前进,因此对fscanf的下一次调用将尝试读取和解析字符串john 再次并失败。等等等等……永远。

如果不需要,您可以丢弃该字符串,可以通过fscanf格式字符串本身来完成:

fscanf(file1, "%*s %d", &marks)

this scanf (and family) reference星号scanf是分配抑制运算符,它读取和解析格式,但不分配给变量。

如果*调用成功,它将返回fscanf,最好在循环条件下进行检查。

© www.soinside.com 2019 - 2024. All rights reserved.