C++ eof()函数陷阱
C++中用eof()檢查是否到達文件結尾
分類:?C 編程?2007-06-26 11:15到達文件結尾有兩種可能的解釋:
一是當程序從一個文件讀取數據時,在程序讀取文件中的最后一項之后就立即出現文件結束的條件。另一種是只有當程序想越過文件的最后一項進行讀取時才出現文件結束的條件。
Ada和Pascal采用第一種解釋。在這些語言中,一個從外部文件讀取數據的DO循環應該形如(用C++語言來寫):
do{
if (infile.eof()) break;
double amount;
infile>>amount;
......}
C++,JAVA采用第二種解釋,在這些語言中,一個從外部文件讀取數據的DO循環應該形如(用C++語言來寫):
do{
double amount;
infile>>amount;
if(infile.eof()) break;
......}
如果在一個c++程序中使用了第一種循環結構,會發生什么情況呢?最后一個值將從文件中讀取并由循環的余部分處理,在下一次循環中eof()將返回false,于是語句infile>>amount;將又執行一次。當沒有數據時,將出現文件結束的條件,但內存中amount的值仍然是一樣的(在大多數系統中)。由于程序不知道已經沒有數據,循環的余下部分將繼續處理最后一個值,好像它在輸入文件中出現了兩次一樣。在下一次循環中,將出現文件結束的條件,于是循環終止。
(在C++中,文件的結束符在程序從文件中讀取最后一項時并沒有出現。它是在下一次讀取時,即當程序想越過最后一個文件項讀取時才出現)
也可以用infile.fail()來檢查。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的C++ eof()函数陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ifstream eof()函数
- 下一篇: C++ Map用法