檔案結束符eof的正確使用

2021-05-23 09:08:49 字數 532 閱讀 7810

問題:

來自:http://topic.csdn.net/u/20100103/00/99f1111e-aebc-496d-bcb2-889bbe82f091.html

如下:

原因:剛好讀到檔案尾的時候,並不會設定檔案結束的標誌位,只有再讀取乙個位元組(由於到了檔案尾了,所以,讀取會失敗)時,才會設定檔案結束標誌位。

因此,上面的程式,讀取到檔案結尾,所有的內容已經輸出,然後再判斷,此時檔案結束標誌並沒有置位。然後再讀取乙個字元的時候,就進行了錯誤的讀取,出錯了,才會置位(eof()判斷的是個出錯的情況啊),讀取也失敗了,所以x裡面的內容仍然是上一次讀取的內容:1。

再考慮這樣的情形,使用read函式每次讀固定的資料大小的資料,如果最後讀取的位元組不夠了的話,那麼在最後這次讀取時,檔案結束標誌就會置位,因為「發生了讀取失敗」的情況,所以要設定標誌以表示這次的「錯誤」。

另外,有位仁兄對c語言的檔案結束的判斷做了相同的解釋:http://blog.csdn.net/pang123hui/archive/2010/02/21/5315180.aspx

換行符 和 檔案結束符EOF

1 在dos平台下,該字元會被展開成 lf 兩個控制字元 相當於 r n 在ascii字符集下是 0dh,0ah 2 在unix平台下,僅僅是,不會展開。3 在二進位制方式下,不管是什麼平台,n 都是精確的。關於eof eof可以作為文字檔案的結束標誌,但不能作為二進位制檔案的結束符.feof函式既...

關於EOF 檔案結束符 問題的體會

最近寫了些 在對檔案的操作中發現了很經典的eof問題,呵呵。eof,即end of file,檔案結尾,作為檔案結束的標誌,在程式中常作為判斷的乙個標誌。但在我們平常的程式中卻常發生意想不到的結果。下面這段程式,猜猜它輸出的是什麼?char c ifstream fin d dat 設d dat檔案...

檔案結束符

初學c 一道例題 使用者輸入一組數,在輸出資訊中顯示共輸入多少個負數。include using namespace std int main cout 當使用istream物件作為條件,結果是測試流的狀態。如果流是有效的,也就是說,如果讀入下乙個輸入是可能的,那麼測試成功。遇到檔案結束符或遇到無效...