[英]Input text file not being read completely
我在主程序中有以下程序
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”之后輸入一個換行符,並且輸出應在此結束,但它將轉到下一行並輸出“一個樣本文件”,然后再輸入一個換行符,但會有下一行。 似乎在第二行之后,程序終止,就好像它接近文件末尾一樣,情況並非如此。
刪除無用的feof
,然后測試fgets
返回錯誤。 “讀取時文件結束”是定義的返回值 。
額外的好處是,您可以按照更合理的順序排列讀取和寫入行。
請記住,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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.