我在主
中有以下程序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”然后接近换行符但是有一个下一行。似乎在第二行之后,程序终止,好像它接近文件的末尾,而不是这种情况。
答案 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;