首頁 > 後端開發 > C++ > C 的 `ifstream::eof()` 函數如何真正與 `get()` 和提取運算子一起工作?

C 的 `ifstream::eof()` 函數如何真正與 `get()` 和提取運算子一起工作?

Susan Sarandon
發布: 2024-11-29 18:48:11
原創
457 人瀏覽過

How Does C  's `ifstream::eof()` Function Really Work with `get()` and the Extraction Operator?

理解ifstream 的eof() 函數

ifstream 類別的eof() 函數在C 中的檔案輸入操作中起至關重要的作用。然而,它的行為有時可能令人費解,特別是與 get() 函數相關。

考慮提供的範例:

#include <iostream>
#include <fstream>

int main() {
    std::fstream inf( "ex.txt", std::ios::in );
    while( !inf.eof() ) {
        std::cout << inf.get() << "\n";
    }
    inf.close();
    inf.clear();
    inf.open( "ex.txt", std::ios::in );
    char c;
    while( inf >> c ) {
        std::cout << c << "\n";
    }
    return 0;
}
登入後複製

當輸入檔案「ex.txt」包含“abc”,第一個 while 迴圈在終止前讀取四個字元。這是因為 eof() 僅在嘗試讀取檔案末尾之後才設定 EOF 標誌。第一個循環逐字元讀取,直到讀取失敗,設定 EOF 標誌。然而,get() 傳回 -1 表示檔案結束,不考慮 EOF 標誌。

第二個循環,使用 >>>操作員表現出正確的行為。 >>操作符嘗試讀取一個字元(在本例中為字串),並在讀取失敗時設定 EOF 標誌。因此,循環在讀取“abc”後結束。

解決混亂

為了避免混亂,請務必注意:

  • -1 是 get() 指示檔案結束的方式。
  • eof() 設定超出檔案末端的讀取嘗試失敗後的 EOF 標誌。
  • 執行讀取和 EOF 標誌更新。

因此,使用>>建議使用 get() 來準確檢測文件結尾。

以上是C 的 `ifstream::eof()` 函數如何真正與 `get()` 和提取運算子一起工作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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