<stdio.h>
C の関数を使用してファイルまたはその他のストリームから読み取る場合、特定の関数によって返される特別な値であり、ファイルの末尾に到達したかEOF
、エラーが発生したために、これ以上データを読み取れないことを示します。関数と関数がありますが、これらは、ファイルの終わりまたはエラー状態を検出した後にのみ使用して、一方を他方と区別する必要があります。feof()
ferror()
たとえば、古典的な C 入力ループは次のとおりです。
int c; /* Note int, *not* char */
while ((c = getchar()) != EOF) {
/* do something with c */
}
/* optional: */
if (ferror(stdin)) {
/* an error occurred, not just end-of-file */
}
C++ には、いくつかの異なるオーバーロードされstd::istream::get()
た関数があります。そのうちの 1 つは引数を取らず、C と非常によく似た動作をします。これ以上データが利用できない場合の値をgetchar()
返します。int
EOF
int c;
while ((c = std::cin.get()) != EOF) {
// do something with c
}
#include <cstdio>
の定義を取得する必要がありますEOF
。
別のオーバーロードされたバージョンは、 a への参照を取り、何かを読み取ることができたかどうかをテストできる結果をchar
返します。istream&
char c;
while (std::cin.get(c)) {
std::cout << c;
}
ファイルの終わりフラグが設定されているかどうかを通知するeof()
関数 (具体的には ) があります。std::ios::eof()
他にもいくつかの状態関数があります: good()
、fail()
およびbad()
。詳しくはこちらをご覧ください。
(注: cplusplus.com は適切なリソースと見なされますか? そうでない場合はお知らせください。リンクを変更します。)
いずれにせよ、状態関数 (feof()
およびferror()
CI/O の場合eof()
、fail()
、bad()
、good()
C++ I/O の場合) をループ条件として使用しないでください。代わりに、入力を試行したときに得られる結果によってループを制御する必要があり、ループが終了した後に他の関数を使用して、ループが終了した理由を判断できます。