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