🔧 入出力 ・ stdio.h ・ C89
feof の使い方int feof(FILE *stream);
直前の入力操作がファイル終端に達したかどうかを調べる。まだ終端に達していないのに次の読み取りを先読みして初めてEOFになる仕組みのため、ループ条件に直接使うと最後の要素を二重処理するバグになりやすい。
#include <stdio.h>
int main(void) {
FILE *fp = fopen("data.txt", "r");
int c;
if (fp) {
while ((c = fgetc(fp)) != EOF) {
putchar(c);
}
if (feof(fp)) puts("\n[EOF reached]");
fclose(fp);
}
return 0;
}
⚠️ while (!feof(fp))という書き方は定番の誤り。読み込み関数の戻り値そのものでループを終える。
アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ
feof と一緒に使う関数fclose
ferror
fflush
fgetc
fgets
fopen
fprintf
fputc
fputs
fread
fscanf
fseek
ftell
fwrite
getchar
gets_s
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。