feof()在这种情况下真的有用吗?我真的找不到它的用途

时间:2018-12-12 12:06:07

标签: c file binary printf feof

我试图从test.txt中读取数据并将其输出到控制台屏幕上。 文本文件数据:

DCA 12 50

DCB 60 70

DCC 70 90

解决方案1 ​​以下代码可以正常工作,但是当文件本身为空时,它将返回异常的数据输出。

FILE *fptr;
fptr = fopen("test.txt", "r");
if (fptr == NULL)
{
    printf("Error\n");
    exit(-1);
}
while (!feof(fptr))
{   
    fscanf(fptr, "%s %d %d", &name, &num, &num2);
    printf("Name :%s Num :%d Num2: %d\n", name, num, num2);

};
fclose(fptr);

接下来发生的是,我的导师向我提出了此解决方案(解决方案2),该解决方案后来导致系统在输出操作期间在控制台屏幕上丢失记录。

FILE *fptr;
fptr = fopen("test.txt", "r");
if (fptr == NULL)
{
    printf("Error\n");
    exit(-1);
}
fscanf(fptr, "%s %d %d", &name, &num, &num2);
while (!feof(fptr))
{   
    printf("Name :%s Num :%d Num2: %d\n", name, num, num2);
    fscanf(fptr, "%s %d %d", &name, &num, &num2);


};
fclose(fptr);

解决方案3 ,这是解决上述问题的另一种方法。

FILE *fptr;
fptr = fopen("test.txt", "r");
if (fptr == NULL)
{
    printf("Error\n");
    exit(-1);
}
while (fscanf(fptr, "%s %d %d", &name, &num, &num2)!= EOF)
{   
    printf("Name :%s Num :%d Num2: %d\n", name, num, num2);
};
fclose(fptr);

但是我想知道这是否是解决上述问题的唯一方法吗?还是有一种方法可以使用feof()检查EOF? 我的导师声称解决方案2 的逻辑没什么错,但IDE(Microsoft Visual Studio)本身呢?我对此表示怀疑,并进行了一些研究,但无法获得任何来源来证实其有效性。

0 个答案:

没有答案