输入文本文件未完全读取

时间:2014-10-05 22:26:29

标签: c file file-io io

我在主

中有以下程序
fgets(buffer, 99, stdin);
while (!feof(stdin))
{
printf("PrintF : %s\n", buffer);
fgets(buffer, 99, stdin);
}
return 0;

我启动cmd窗口并编译,然后使用文件参数运行程序。

file.exe < samplefile.txt

在txt文件中我有以下几行

  

你好,这是

     

示例文件

     

by alanz2223

然而输出是

  

PrintF:你好,这是

     

PrintF:示例文件

似乎省略了“by alanz2223”这一行。 根据fgets()函数描述,它从流中读取字符并将它们作为C字符串存储到str(第一个参数)中,直到读取了(num-1)个字符或者到达了换行符或文件结尾,以先发生者为准。

根据这个描述然后在“Hello this is”之后接近换行符并且输出应该在那里结束但是它进入下一行并输出“a sampe file”然后接近换行符但是有一个下一行。似乎在第二行之后,程序终止,好像它接近文件的末尾,而不是这种情况。

2 个答案:

答案 0 :(得分:1)

删除无用的feof,并测试fgets是否返回错误。 &#34;阅读时文件结束&#34;是a defined return value

奖励是您可以将阅读和写作行更符合逻辑顺序。

答案 1 :(得分:1)

请记住fgets将文件缓冲区移动到它读取的行的末尾。最后一行未被打印,因为该函数读取最后一行,然后将文件缓冲区移动到feof函数终止while循环的行的末尾。在循环结束后尝试添加printf:

fgets(buffer, 99, stdin);
while (!feof(stdin))
{
printf("PrintF : %s\n", buffer);
fgets(buffer, 99, stdin);
}
printf("PrintF : %s\n", buffer);
return 0;