fread feof 檔案尾讀取重複的問題

2021-07-25 15:01:23 字數 358 閱讀 6789

問題:多路歸併排序時,每次通過fread讀取小檔案裡的乙個double資料,通過feof判斷是否讀取結束,

結果,在最後總的排序檔案中,每個小檔案的最後一行的資料回重複一遍

原因:feof只是檢查標誌位,如果是good則返回0,是bad就返回1。

更改標誌位的fread函式,只有當它讀不到東西了,才會把標誌位從good變成bad,當fread讀到最後乙個字元時,由於讀取是成功的,標誌位沒有變化,表示檔案還能讀,

實際上已經沒有東西可讀了,只有下次fread時才會發現

解決方法:

不要通過feof的值去判斷是否到了檔案尾,通過fread去判斷

fread返回讀取的位元組數,如果返回0,說明讀到了檔案尾

C 判斷讀取檔案尾

主要在於eof 不只是讀取檔案的最後乙個字元,它會接著往後讀取,如果此函式返回ture時,則此時返回的檔案結束符0xff才是真正的結尾。具體內容如下 在使用c c 讀檔案的時候,一定都使用過eof 這個函式來判斷檔案是否為空或者是否讀到檔案結尾了,也會在使用這個函式的過程中遇到一些問題,如不能準確的...

C 檔案操作 檢查檔案尾 讀取模式

檔案操作 讀取檔案時的讀取模式 fstream類中有個open 函式,其原型為 void open const char filename,int mode int access 引數含義 filename 開啟檔案的名字 mode 開啟檔案的模式 access 開啟檔案的屬性 開啟檔案的屬性在io...

檔案尾條件

檔案尾條件 在文字輸入時,當遇到檔案尾 eof 程式會停止輸入。很多作業系統都允許通過鍵盤來模擬檔案尾條件。在linux中通常是按下ctrl z來模擬檔案尾,在windows下一般是ctrl z和enter。有些c 實現支援類似的行為,即使底層作業系統不支援。如果程式設計環境能夠檢測eof,則可以使...