2014-10-05 73 views
-1

我都內主要輸入文本文件不被讀取完全

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

下面的程序,我開始一個cmd窗口和編譯,然後運行一個文件參數的程序。

file.exe < samplefile.txt 
txt文件內

我有以下行

你好這是

一個示例文件

通過alanz2223

然而輸出是

的printf:你好,這是

的printf:樣本文件

它似乎忽略了 「由alanz2223」 行。 根據fgets()函數描述,它從流中讀取字符,並將它們作爲C字符串存儲到str(第一個參數)中,直到(num-1)個字符被讀取或換行符或文件結束符爲達到,以先發生者爲準。

根據這個描述,然後在「Hello this is」之後接近一個換行符,並且輸出應該在那裏結束,但它到達下一行並輸出「一個樣本文件」然後接近一個換行符,但是有下一行。看起來在第二行之後,程序終止,就好像它接近了文件的結尾,而不是這種情況。

回答

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; 
+0

解決了這個問題,我不知道fgets將文件緩衝區移到了行尾。我很感激。 – Alan 2014-10-05 22:59:01

1

刪除無用的feof,並測試fgets是否返回錯誤。 「閱讀時文件結束」是a defined return value

一個好處是你可以把讀寫行按照更合理的順序。