用feof 判斷檔案時出現多讀內容的問題

2021-07-23 20:14:23 字數 739 閱讀 3396

昨天將自己以前做的電子通訊錄加上了檔案讀寫的功能,是的資料可以關機儲存,開機讀取。

在修改的過程中出現了乙個問題就是每次開啟程式時,讀檔案內的內容總是會在最後多讀一串資料,經過上網查詢找到了問題所在。

下面我先把我原來寫的錯誤的程式部分貼出

while(0 == feof(stream)) 

這裡我是先用feof()判斷檔案指標有沒有到結尾,再讀取資料,再寫到我建立的結構體中,按理說著沒有什麼邏輯錯誤,但是結果卻是結尾多讀了一次,最後乙個結構體讀了兩次。

查詢feof()的性質我發現

只有當檔案位置指標到了檔案末尾,再發生讀/寫操作,

然後再呼叫feof(),才會得到檔案結束的資訊。也就是說feof()是要先讀過才可以判斷是否到了檔案尾。這是乙個常見的錯誤,很容易犯。

按照這樣我修改了我的程式,下面貼出

fread(&from,sizeof(struct file_node),1,stream);

while(0 == feof(stream)) 

這裡我是先在while()迴圈體上面先用fread讀一次,再開始執行while(),在while()迴圈體中我將以前第一句的fread()語句刪除,直接開始拷貝資料,在迴圈體結尾,我用了一次fread(),這樣就做到了先讀寫再判斷。當拷貝完最後乙個結構體後,fread一次,檔案到達結尾,feof判斷到達結尾,退出迴圈,順序執行。

經過修改,可以正常讀取了。

讀檔案,判斷單詞出現個數 c 實現

這個版本為區分大小寫的實現 可直接通過編譯 include include include include ifndef foreach define foreach container,it for typeof container begin it container begin it cont...

用sscanf s按指定格式讀檔案,出現亂碼

我 小白學c c 兩個半月 只是想記錄我的一些bug,大神勿進 讀的檔案 如下 include include include include include using namespace std int main sscanf s line.c str name s age d name,siz...

用python寫入csv檔案時出現的亂碼問題

問題及思路過程 這段時間在用python來寫入csv檔案時出現了乙個問題,當用utf 8寫入csv檔案時 匯出來的csv檔案一直都是有亂碼的存在,可能是我用的cmu資料集裡面有西文字元存在的關係,但是uft 8包含所有的字元,在這裡糾結了很久,在網上查閱了一些資料通過改變檔案編碼來解決這個問題,最後...