首頁 > 後端開發 > C++ > 在 C 中讀取檔案流時如何正確測試檔案結尾?

在 C 中讀取檔案流時如何正確測試檔案結尾?

Linda Hamilton
發布: 2024-12-21 15:33:10
原創
732 人瀏覽過

How to Correctly Test for End-of-File When Reading from a File Stream in C  ?

測試流輸入狀態與未來的成功

使用流讀取輸入時,了解測試流狀態和預測之間的區別至關重要未來營運的成功。

問題:閱讀最後一行兩次

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
登入後複製

在此程式碼中,最後一行被讀取兩次,因為f.good() 測試目前串流狀態,而不是getline() 是否成功。一旦 getline() 到達 EOF,f 仍處於「良好」狀態,因此即使在讀取最後一行後,迴圈仍會繼續。

解決方案:操作後測試流

相反,在執行輸入操作後檢查流狀態:

ifstream f("x.txt");
string line;
while (getline(f, line)) {
  // Use line here.
}
登入後複製

替代使用eof()

雖然不建議在循環條件中使用eof(),但這裡有一個使用!f.eof() 的等效解:

ifstream f("x.txt");
string line;
while (!f.eof()) {
  if (getline(f, line)) {
    // Use line here.
  } else {
    break;
  }
}
登入後複製

範圍-基於所有行的循環

要讀取和處理所有行,請使用基於範圍的循環:

ifstream f("x.txt");
for (std::string line; getline(f, line);) {
  process(line);
}
登入後複製

Good 與Stream State

請注意,f.good() 命名錯誤。它並不真正指示流的“良好”,而是當流不處於“失敗”或“不良”狀態時返回 true。在執行輸入操作後始終測試流程本身(即檢查其反轉的失敗狀態)以確保成功。

以上是在 C 中讀取檔案流時如何正確測試檔案結尾?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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