Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のfeof()関数とは?プログラム例で学ぶファイル終端(EOF)の検出方法


問題

C言語でファイルを読み込む際、コンパイラ(正確にはプログラム)は「ファイルの終端に達したこと」をどのように検出すればよいのでしょうか。本記事では、具体的なプログラムを用いてその仕組みを解説します。

解決策

feof() は、C言語の標準ライブラリに含まれるファイル操作関数の一つです。ファイルポインタがファイルの終端(EOF: End Of File)に達したかどうかを判定するために使用されます。

feof()関数は、ファイルの終端に達していれば0以外の値(真)を返し、まだ終端に達していなければ0(偽)を返します。この特性を利用することで、読み込み処理を安全に終了させることができます。

ファイル終端検出の基本的なロジック

ファイルの終端を検出するための基本的な処理の流れは以下の通りです。

fp = fopen ("number.txt", "r"); // ファイルを読み込みモードで開く
printf ("file content is\n");
for (i=0;i<=100;i++){
    n = getw(fp); // 1つずつ数値を読み込み、変数nに格納
    if(feof(fp)) { // ファイルポインタが終端に達したらループを抜ける
        printf ("reached end of file");
        break;
    } else {
        printf ("%d\t", n);
    }
}

サンプルプログラム

以下は、feof()関数の動作を確認できる完全なC言語プログラムです。まず書き込みモードでファイルに数値を保存し、その後読み込みモードで開いて、feof()によって終端を検出しながら内容を表示します。

#include<stdio.h>
int main(){
    FILE *fp;
    int i,n;
    /* number.txt を書き込みモードで開き、10刻みの数値を書き込む */
    fp = fopen ("number.txt", "w");
    for (i=0;i<=100;i= i+10){
        putw(i,fp);
    }
    fclose (fp);
    /* 同じファイルを読み込みモードで再度開く */
    fp = fopen ("number.txt", "r");
    printf ("file content is\n");
    for (i=0;i<=100;i++){
        n = getw(fp);
        if(feof(fp)){
            printf ("reached end of file");
            break;
        } else {
            printf ("%d\t", n);
        }
    }
    return 0;
}

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

file content is
0 10 20 30 40 50 60 70 80 90 100 
reached end of file

解説のポイント

  • putw() / getw():整数値をバイナリ形式でファイルに書き込む・読み込むための関数です。
  • feof()の判定タイミング:読み込み関数(getwなど)を実行した後に呼び出すことで、正しく終端を検出できます。
  • break文:終端を検出した時点でループを強制終了し、それ以上の無駄な読み込みを防ぎます。

このように、feof()関数を活用することで、ファイルサイズが事前に分からない場合でも、安全かつ確実にファイルの終端までデータを読み込むことが可能になります。

  1. 【C言語】putw()関数とgetw()関数の使い方をわかりやすく解説

    ファイルとは、レコードの集合体であり、データを永続的に保存しておくためのハードディスク上の場所のことです。C言語ではファイルを利用することで、プログラムの実行が終了しても失われないデータを扱えます。ファイルに対する主な操作C言語におけるファイル操作は、基本的に以下の手順で行います。ファイル名を指定する(命名)ファイルを開くファイルから読み込むファイルに書き込むファイルを閉じる基本構文まず、ファイルを扱うためのファイルポインタを宣言します。FILE *ファイルポインタ;宣言例:FILE *fptr;続いて、fopen()関数を使ってファイルを開きます。ファイルポインタ = fopen(ファイル名

  2. C言語のループ制御文(for・while・do-while)を徹底解説!フローチャートとサンプルコード付き

    C言語におけるループ制御文は、同じ処理を何度も繰り返し実行したい場合に使われる重要な構文です。毎回コードを書き連ねる必要がなくなり、プログラムを簡潔かつ効率的に記述できます。 C言語で利用できるループ制御文は、主に以下の3種類です。 for文 while文 do-while文 本記事では、それぞれの構文の書き方、フローチャートによる動作の流れ、実際に動くサンプルプログラムと実行結果まで、初心者にもわかりやすく解説します。 for文とは?基本構文と使い方 for文は、「初期化」「条件式」「増減式」を1行にまとめて記述できる、最もよく使われるループ構文です。繰り返す回数があらかじめ決まっている