C言語でよく見るEOFについて、意味や使い方を解説

C言語でプログラミングをする際によく使われるEOF。

初心者の方にとっては、その意味や使い方が分かりづらいこともあるかもしれません。

そこで本記事では、EOFの基本的な意味や使い方を解説し、サンプルコードを交えてわかりやすく説明します。

C言語プログラミング初心者の方はぜひ参考にしてください。

目次

EOFとは何か?

EOFとは、End Of Fileの略であり、ファイルの終わりを表す特殊な値です。

C言語では、ファイルから1文字ずつ読み込む際に、EOFが出現するまで繰り返し処理を行います。

EOFの使い方

EOFは、End Of File(ファイルの終端)を表す特別な値です。C言語では、ファイルからの入力を行う際に、EOFが検知されると入力処理が終了ように条件式を記述することが多いです。

ファイルの終端を検知する

以下は、ファイルから1文字ずつ読み込みながら、EOFが検知されるまで繰り返し処理を行う例です。

#include <stdio.h>

int main() {
    FILE *fp;
    char c;

    fp = fopen("sample.txt", "r");
    if (fp == NULL) {
        printf("ファイルを開けませんでした\n");
        return 1;
    }

    while ((c = fgetc(fp)) != EOF) {
        printf("%c", c);
    }

    fclose(fp);

    return 0;
}

このプログラムでは、fgetc()関数を使ってファイルから1文字ずつ読み込んでいます。while文の条件式では、fgetc()関数が返す値がEOFかどうかを判定しています。もしEOFであれば、繰り返し処理を終了します。

ファイルの終端以外での使用例

次に紹介する例は、「Ctrl + D」キー(Windows環境では「Ctrl + Z」)が押された場合にプログラム実行中に強制的にEOFとして扱う方法です。

#include <stdio.h>

int main() {
    char str[100];

    while (fgets(str, sizeof(str), stdin) != NULL) {
        printf("%s", str);
    }

    return 0;
}

このプログラムでは、fgets()関数を使ってユーザーから1行分のキーボード入力(改行コード含む)を受け取っています。

しかし、「Ctrl + D」キー(Windows環境では「Ctrl + Z」)が押されてEOFが送信された場合、NULLポインタが返されます。

つまり、コンソールウィンドウからEOFが送信された場合はfgets関数の戻り値がNULLかどうか判定して、強制的にEOFとして扱うことができます。

以上がEOFの基本的な使い方です。

EOFの注意点

EOFは、ファイルの終端を表すために使われる特殊な値であり、整数型の定数として定義されています。一般的には-1として定義されていますが、厳密にはプラットフォームやコンパイラによって異なる場合があります。

なのでEOFの代わりに-1と記述するのはおすすめしません。

終わりに

以上が、C言語でよく見るEOFについての解説でした。

EOFは、ファイルの終端を検知するためだけでなく、標準入力からの入力を終了する際にも利用されます。

ファイル操作に欠かせない定数のひとつなので、必ず覚えておくようにしましょう。

目次