C 文本文件的最后一行打印两次
假设FILE_NAME是一个全局常量 如果我有以下代码C 文本文件的最后一行打印两次,c,file-io,C,File Io,假设FILE_NAME是一个全局常量 如果我有以下代码 FILE *file; file = fopen(FILE_NAME, "r"); char string[30]; do { fgets(string, 30, file); printf("%s", string); } while ( !feof(file) ); 它打印txt文件中的所有行,但最后一行打印两次。如何防止打印两次?您需要将循环更改为: while ( fgets(string, 30, file) !
FILE *file;
file = fopen(FILE_NAME, "r");
char string[30];
do
{
fgets(string, 30, file);
printf("%s", string);
}
while ( !feof(file) );
它打印txt文件中的所有行,但最后一行打印两次。如何防止打印两次?您需要将循环更改为:
while ( fgets(string, 30, file) != NULL ) {
printf("%s", string);
}
fgets()
将失败并在feof(file)
变为真之前返回NULL
,并且它不会更新string
。因此,现在您正在最后一行成功调用fgets()
,打印它,调用fgets()
失败,再次打印最后一行,然后终止循环
这里要理解的关键是,只有当您尝试读取文件但读取失败时,才知道您位于文件的末尾。在此之前,例如,据您所知,自上次读取文件以来,可能有人在文件末尾追加了数据