前一段時間在使用 getline() 按行讀取整個檔案時遇到了乙個很奇怪的問題——檔案的最後一行會被讀取多次。百思不得其解,後來上網查了很久才發現原來是用於檢測檔案結尾的 eof() 的問題。eof() 報告最近讀取的結果,也就是說,它們在事後報告,而不是預先報告,因此應將eof() 測試放在讀取之後。
eof()
函式的功能是:判定是否已經讀到檔案的結尾,如果到檔案結尾,該函式返回值為1,否則返回為0。事實上,檔案本身是沒有檔案結束符eof的。當讀取檔案中最後乙個有效字元後,雖然檔案指標已指向空白了,但這時還不知道是否到了檔案末尾,只有再讀取一次檔案,待讀不到任何內容了,這時輸入流設定eofbit位,eof的返回值才為l,而空的內容是不會被提取到變數的,故最後一次讀到變數中的內容又被重複輸出了。
所以解決這個問題的方法就是先讀取,然後判斷檔案是否為空,如果不為空則輸出,即**如下:
1ifstream fin(inputname);
2ofstream fout(outputname);
3string
str;
4 fin>>str;
5while(!fin.eof())
6
fgets與feof 判斷檔案結尾
fgets 是讀取檔案中的一行,當讀檔案過程中發生錯誤或者讀到檔案尾時,返回null,所以不能使用fgets null來判斷是否到了檔案尾,需要結合feof null 才能確定是否到了檔案尾 while feof fp fgets temp,100,fp operation temp 這種判斷是否到...
判斷讀入資料檔案結尾 從檔案讀入資料
參考 在使用c c 讀檔案的時候,使用eof 這個函式來判斷檔案是否為空或者是否讀到檔案結尾的時候會有一些特殊情況 先看 include include using namespace std int main e return 0 上述 在vs2012下編譯執行,發現,當檔案結尾沒有空行時,結果正...
C語言 EOF和feof 判斷檔案結尾的區別
由於字元的ascii碼不可能出現 1,因此eof定義為 1 是合適的 當以文字形式讀取檔案內容,讀入的字元值等於eof時,表示讀入的已不是正常的字元而是檔案結束符 當以二進位制形式讀取檔案內容,資訊都是以數值方式存在的,eof的值可能就是所要處理的二進位制檔案中的資訊,此時需要用 feof 來判斷是...