😸
[C] clearerr 関数
機能
ファイルストリームのエラー・EOF状態をリセットする[1]
使用例
clearerr(fp);
と記述する
\n
は改行を表す エスケープシーケンス[2]
コード
clearerr(fp);
全文
#include <stdio.h>
void main() {
FILE* fp = fopen("data.txt", "r");
// ファイル末尾まで読むとfeof(fp)がtrueになる
int ch;
while((ch = fgetc(fp)) != EOF) { }
// EOF状態になる
clearerr(fp); // ここでEOF状態をリセット
// 再び読む・エラー確認などができるようになる
fclose(fp);
}
実行結果
(実行時の出力結果は特にありません)
feof(fp)
が真でも clearerr(fp);
でリセットできる
コード
if (feof(fp)) {
clearerr(fp);
}
全文
#include <stdio.h>
void main() {
FILE* fp = fopen("data.txt", "r");
while (fgetc(fp) != EOF); // 読み切る
if (feof(fp)) {
printf("EOF before clearerr\n");
clearerr(fp);
}
if (!feof(fp)) {
printf("EOF cleared\n");
}
fclose(fp);
}
実行結果
EOF before clearerr
EOF cleared
Discussion