重複錯誤:EOF 重複文字檔案讀取中的最後一行
相關程式碼旨在從文字檔案中逐行讀取整數直到到達文件結束(EOF) 指示符。然而,最終迭代意外地讀取了最後一個整數兩次。
問題根源:
問題在於檔案讀取的性質。當輸入流到達 EOF 標記時,將引發 ios::eofbit。該位元表示上次讀取操作遇到了 EOF,而不是流已到達檔案末尾。
詳細分析:
考慮下列事件序列:
在最後一次迭代中,整數30仍然是目前值輸入流。當遇到 EOF 時,ios::eofbit 會升高,但 x 的值仍為 30。程式碼繼續輸出 x 的值(即 30)並在循環條件中檢查 EOF。由於現在設定了 EOF,程式將退出循環。
建議修復:
要解決此錯誤,請用更明確的EOF 檢查替換循環條件:
while (true) { int x; iFile >> x; if (iFile.eof()) break; cerr << x << endl; }
透過在每次讀取操作後明確檢查EOF,代碼確保最後一個整數不會被讀取和列印兩次。
其他錯誤:
原始程式碼也缺乏錯誤檢查。如果輸入檔為空,則循環將永遠不會終止,因為直到第一個讀取操作遇到 EOF 為止,eofbit 才會被提升。為了防止這種情況,請在嘗試讀取文件之前添加適當的錯誤處理。
以上是為什麼我的 EOF 檢查在讀取文字檔案時會重複最後一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!