我主要有以下程序
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 file”,然后再输入一个换行符,但是会有下一行。似乎在第二行之后,程序终止,就好像它已接近文件末尾一样,情况并非如此。
最佳答案
请记住,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;
关于c - 输入文本文件未完全读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26207865/