首頁 > 後端開發 > C++ > 為什麼我的 EOF 檢查在讀取文字檔案時會重複最後一行?

為什麼我的 EOF 檢查在讀取文字檔案時會重複最後一行?

Patricia Arquette
發布: 2024-12-31 12:18:09
原創
781 人瀏覽過

Why Does My EOF Check Repeat the Last Line When Reading a Text File?

重複錯誤:EOF 重複文字檔案讀取中的最後一行

相關程式碼旨在從文字檔案中逐行讀取整數直到到達文件結束(EOF) 指示符。然而,最終迭代意外地讀取了最後一個整數兩次。

問題根源:

問題在於檔案讀取的性質。當輸入流到達 EOF 標記時,將引發 ios::eofbit。該位元表示上次讀取操作遇到了 EOF,而不是流已到達檔案末尾。

詳細分析:

考慮下列事件序列:

  1. 讀取整數 10。
  2. 讀取整數20.
  3. 讀取整數30。
  4. 讀取30後遇到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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板