テキスト ファイルからの EOF 読み取りのトラブルシューティング
ファイルの終わり (EOF) に達するまでテキスト ファイルから読み取る場合、次のことが重要です。入力ストリームの動作を理解して行の重複を避けるため。
C では、 ifstream オブジェクトはテキスト ファイルからの読み取りに使用されます。提供されているコードは、テキスト ファイルから整数を読み取る一般的な方法を示していますが、最後の行が 2 回読み取られるという問題が発生します。
問題の理解
この問題は、eof() 関数がストリームの内部ポインタに基づいて EOF をチェックするために発生します。内部ポインタは、EOF に達したときにファイルの最後の文字の後に配置されます。コードは、整数に遭遇したときに最後の行を 1 回読み取り、ループ内で EOF をチェックするときにもう一度読み取ります。
解決策
これを修正するには、次のことを確認することをお勧めします。ループ内の整数を読み取る前に、EOF を確認します。これにより、最後の整数が 1 回だけ読み取られることが保証されます。
while (!iFile.eof()) { if (iFile.peek() != EOF) { int x; iFile >> x; cerr << x << endl; } }
ここで、iFile.peek() は、実際には読み取らずにストリーム内の次の文字をチェックします。 EOF でない場合は、整数が読み取られて出力されます。
代替アプローチ
さらに、getline 関数を使用してコードを書き換えて、整数から行全体を読み取ることもできます。ファイルを開き、整数を手動で解析します。このアプローチにより、EOF の問題が完全に回避されます。
ifstream iFile("input.txt"); while (getline(iFile, line)) { istringstream ss(line); int x; ss >> x; cerr << x << endl; }
以上がC コードが EOF をチェックするときにテキスト ファイルの最後の行を 2 回読み取るのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。