理解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”後結束。
解決混亂
為了避免混亂,請務必注意:
執行讀取和 EOF 標誌更新。
因此,使用>>建議使用 get() 來準確檢測文件結尾。
以上是C 的 `ifstream::eof()` 函數如何真正與 `get()` 和提取運算子一起工作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!