我有程序喜欢(来自链接文字)
FILE* soubor;
char buffer[100];
soubor = fopen("file","r");
string outp = "";
while (! feof(soubor))
{
fgets(buffer,100,soubor);
fputs (buffer , stdout);
}
fclose(soubor);
Run Code Online (Sandbox Code Playgroud)
和文件一样
A
B
C
D
E
Run Code Online (Sandbox Code Playgroud)
程序的输出是
A
B
C
D
E
E
Run Code Online (Sandbox Code Playgroud)
它重复两次文件的最后一行.我在其他程序中也有这个问题.
问题是,对于最后一行,fgets将失败.但是,在下一个循环之前,您不会检查feof,因此您仍然会调用fputs来打印缓冲区的内容,即前一行.
试试这个:
FILE* soubor;
char buffer[100];
soubor = fopen("file","r");
string outp = "";
while (true)
{
fgets(buffer,100,soubor);
if (feof(soubor))
break;
fputs (buffer , stdout);
}
fclose(soubor);
Run Code Online (Sandbox Code Playgroud)
使用feof()循环从条件读取的条件几乎总是会导致问题.标准方式如下所示:
while (fgets(buffer, 100, infile))
fputs(buffer, stdout);
Run Code Online (Sandbox Code Playgroud)