【发布时间】:2013-09-21 06:44:33
【问题描述】:
我是 C 的初学者。当我使用这个 while 循环来打印文件的包含时。最后一行将在 Linux 上打印两次。到达文件末尾时不应进入 while 循环。在windows上没问题。
#include <stdio.h>
#include <unistd.h>
int main()
{
char string[400];
FILE *file_para;
// Open the file
if ((file_para = fopen("Test.txt", "r")) == NULL)
{
printf("cannot open file\n");
getchar();
return 0;
}
while (!feof(file_para))
{
fgets(string, 400, file_para);
printf("**** %s", string);
}
fclose(file_para);
getchar();
return 0;
}
【问题讨论】:
-
使用
fgets(...)作为你的循环条件。当读取更多字符失败时,它将返回NULL。 -
feof检查(或至少要注意的事情)的问题在于它记录在案:“此指标通常由尝试读取的流上的先前操作设置在文件结尾处或之后。”因此,您可能在文件末尾是正确的,并且在您进行另一次读取之前它仍然不会指示 EOF。因此,您完成的最后一个fgets可能已超出文件末尾。正如@MohammadAliBaydoun 所指出的,您应该使用您的fgets调用作为您的读取和您的EOF 检查循环。 -
非常感谢。它有效。