首頁 >後端開發 >C++ >為什麼 `ifstream::eof()` 與 `get()` 和提取運算子 (`>>`) 的行為不同?

為什麼 `ifstream::eof()` 與 `get()` 和提取運算子 (`>>`) 的行為不同?

DDD
DDD原創
2024-12-02 06:36:11937瀏覽

Why Does `ifstream::eof()` Behave Differently with `get()` and the Extraction Operator (`>>`)?
“/>>`)?

深入了解ifstream 的eof() 函數

理解ifstream 的eof() 函數的行為可能會令人費解,如提供的程式碼片段所示:

包含

include

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;

}

讓我們深入研究解釋提供:

何時真正設定EOF

eof() 函數會偵測讀取操作何時嘗試存取檔案結尾以外的數據,這表示:

  • 如果您有一個內容為「abc」的檔案並讀取了3 個字符,eof() 將是false。字符,eof() 將變為true,表示已到達文件末尾。 file.
  • 揭開get() 和>>

程式碼片段中的兩個循環使用不同的方法來讀取檔案內容的魔力:

第一個循環使用inf.get() 一次檢索一個字元。 c,它將讀取嘗試和分配結合在一個操作中。終止循環。它在嘗試讀取超出末尾的內容之前終止循環

避免-1 的危險
  • 為了避免依賴幻數-1 來識別檔案結尾,建議使用std : :char_traits::eof() 或std::istream::traits_type::eof() 代替。

以上是為什麼 `ifstream::eof()` 與 `get()` 和提取運算子 (`>>`) 的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn