ストリーム条件のテスト: Good() または !eof() を使用すると最後の行が 2 回読み取られる理由
テキスト ファイルを読み取ろうとしたときifstream を使用して 1 行ずつ実行すると、ループ内で f.good() または !f.eof() を利用すると、最後の行が 2 回読み取られる可能性があります。この動作の背後にある理由を詳しく調べ、別の解決策を検討してみましょう。
ストリーム状態関数について
good()、eof()、およびfail()はストリーム状態です。入力ストリームの現在の状態を示す関数。ただし、将来の入力操作の成功または失敗を予測するものではありません。
最後の行を 2 回読み取る理由
この問題は、good() と eof( ) は、必ずしも最後の入力操作の結果を反映するわけではありません。たとえば、!f.eof() は、前の getline() が成功したことを保証しません。逆に、EOF にないことは、最後の入力操作が失敗したことを意味するものではありません。
代替解決策: 入力操作後のストリーム状態の確認
行を正しく読み取り、処理するには、入力操作の実行後にストリームの状態を確認することが重要です:
if (getline(f, line)) { // Use line here } else { // Handle error or end of file }
代替解決策: ループによる反復
もう 1 つの洗練された解決策は、getline() が失敗するまで反復するループを使用することです。 >
for (string line; getline(f, line);) { // Use line here }
以上が「good()」または「!eof()」を使用すると、ファイルの最後の行が 2 回読み取られるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。