😸

[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
脚注
  1. C言語のファイル操作で、fopen等で開いたFILE型変数の異常状態を元に戻す関数。 ↩︎

  2. 改行やタブなど、画面に表示されない制御文字のこと。 ↩︎

Discussion