>`)? " />
ifstream の eof() 関数の詳細
提供されたコード スニペットに示されているように、ifstream の eof() 関数の動作を理解するのは難しい場合があります。
</p> <h1>を含む<iostream></h1> <h1>include <fstream></h1> <p>int main() {</p> <pre class="brush:php;toolbar:false">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() 関数は、読み取り操作がファイルの末尾を超えてデータにアクセスしようとしたときを検出します。
この動作の理由ファイル サイズの概念がテキストほど単純ではないパイプやソケットなど、さまざまなデバイスとの互換性を確保するためです。 file.
get() と >> の魔法を明らかにする
コード スニペット内の 2 つのループは、ファイルの内容を読み取るために異なるアプローチを使用します。
これは、なぜ最初のループは余分な文字を読み取り、-1 を表示しますが、2 番目のループは正しい出力を返します。ループの最後を超えて読み取ろうとする前にループを終了します。 file.
-1 の危険を回避する
ファイルの終わりを識別するためにマジックナンバー -1 に頼ることを避けるために、std を使用することをお勧めします。 :char_traits
以上が`ifstream::eof()` が `get()` と抽出演算子 (`>>`) で異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。