我试图从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)本身呢?我对此表示怀疑,并进行了一些研究,但无法获得任何来源来证实其有效性。