首页 文章

输入文本文件未完全读取

提问于
浏览
-1

我在main中有以下程序

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

我启动一个cmd窗口并编译,然后使用file参数运行该程序 .

file.exe < samplefile.txt

在txt文件中我有以下几行

您好这是alanz2223的示例文件

但输出是

PrintF:你好这是PrintF:一个示例文件

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

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

2 回答

  • 1

    删除无用的 feof ,并测试 fgets 是否返回错误 . "End of file while reading"是a defined return value .

    奖励是您可以将阅读和书写行放在更合乎逻辑的顺序中 .

  • 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;
    

相关问题