4

このプログラムを見てみましょう:

ifstream filein("hey.txt");


if(filein.eof()){
    cout<<"END"<<endl;
}

ここで「hey.txt」は空です。したがって、ここでの if 条件は true である必要があると考えられますが、そうではありません

ファイルが空なのに eof が true を返さないのはなぜですか?

ifeof が true を返す前にこれを追加した場合arr、まだ空であり、ファイルもまだ空であるため、両方とも変更されていません

char arr[100];
filein.getline(arr,99);
4

3 に答える 3

5

eof() function returns "true" after the program attempts to read past the end of the file.

You can use std::ifstream::peek() to check for the "logical end-of-file".

于 2012-08-26T22:02:34.213 に答える
3

std::ios_base::eofbit読み取り中にストリームの最後に到達すると、フラグが設定されます。ストリームの最後を超えて読み取ろうとするまで、このフラグは設定されません。

一般に、 の使用std::ios_base::eofbitはかなり制限されています。唯一の合理的な使用法は、読み取りが失敗した後のエラーを抑制することです。ファイルの終わりに達したために読み取りが失敗した場合、通常はエラーにはなりません。このフラグを他の目的に使用しようとしてもうまくいきません。

于 2012-08-26T22:05:20.450 に答える
3

eof()C++ ストリーム オブジェクトに「ファイルの終わり」フラグが設定されているかどうかをテストします。このフラグは、読み取り操作が基礎となるデバイス (ファイル、標準入力、パイプなど) からの入力の最後に遭遇したときに設定されます。空のファイルを読み取ろうとする前は、フラグは設定されていません。フラグがストリーム オブジェクトに設定される前に、何かを読み取ろうとする操作を実行する必要があります。

于 2012-08-26T22:06:02.853 に答える