簡體   English   中英

輸入文本文件未完全讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM