首頁 > 後端開發 > C++ > 為什麼使用`good()`或`!eof()`會讀取檔案的最後一行兩次?

為什麼使用`good()`或`!eof()`會讀取檔案的最後一行兩次?

Patricia Arquette
發布: 2024-12-16 03:27:11
原創
858 人瀏覽過

Why Does Using `good()` or `!eof()` Read the Last Line of a File Twice?

測試流條件:為什麼使用good() 或!eof() 讀取最後一行兩次

嘗試讀取文字檔時使用ifstream 逐行,在循環中使用f.good() 或!f.eof() 可能會導致最後一行讀取兩次。讓我們深入研究這種行為背後的原因並探索替代解決方案。

了解流狀態函數

good()、eof() 和 failed() 是流狀態指示輸入流當前狀態的函數。然而,它們並不能預測未來輸入操作的成功或失敗。

兩次讀取最後一行的原因

問題的發生是因為 good() 和 eof( )不一定反映最後輸入運算的結果。例如,!f.eof() 不保證前面的 getline() 成功。相反,不在 EOF 並不意味著上次輸入操作失敗。

替代解決方案:在輸入操作後檢查流狀態

要正確讀取和處理行,執行輸入後檢查流狀態至關重要操作:

if (getline(f, line)) {
  // Use line here
} else {
  // Handle error or end of file
}
登入後複製

替代解決方案:使用循環迭代

另一個優雅的解決方案是使用迭代直到getline() 失敗的循環:

for (string line; getline(f, line);) {
  // Use line here
}
登入後複製

避免錯誤命名good()函數

最後,要注意的是,good() 是一個用詞不當,並不等於測試流本身。建議使用上述技術,而不是依賴 good()。

以上是為什麼使用`good()`或`!eof()`會讀取檔案的最後一行兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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