C言語のきほん「ファイルデータの集計」

スポンサーリンク
C言語 C言語

今回は、ファイルに保存されている名前、身長、体重のデータを1件ずつ読み込んで、画面に表示し、最後に平均身長と平均体重を表示するプログラムをご紹介しよう。

なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.91.1)を使用して作成し、gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0で コンパイルしている。

//名前と身長と体重を読み込んで平均値を表示するプログラム

#include <stdio.h>

int main(void)
{
    FILE *fp;

    if((fp = fopen("height-weight.txt","r")) == NULL)
        printf("ファイルをオープンできません\n");
    else {
        int ninzu = 0;          //人数
        char name[100];         //名前
        double height,weight;   //身長・体重
        double hsum = 0.0;      //身長の合計
        double wsum = 0.0;      //体重の合計

        while (fscanf(fp,"%s%lf%lf",name,&height,&weight)== 3)
        {
           printf("%-10s %5.1f %5.1f\n",name,height,weight);
           ninzu++;
           hsum +=height;
           wsum +=weight;
           
        }

        printf("-----------------------\n");
        printf("平均       %5.1f %5.1f\n",hsum / ninzu,wsum / ninzu);
        fclose(fp);
        

    }
    return 0;
}

「height-weight.txt」ファイルの内容

Uemura  160.0   59.3
Inoue   162.0   51.6
Murai   170.0   76.5
Tanaka  175.0   83.9
Wada    175.0   72.5

実行結果

Uemura     160.0  59.3
Inoue      162.0  51.6
Murai      170.0  76.5
Tanaka     175.0  83.9
Wada       175.0  72.5
-----------------------
平均       168.4  68.8

本プログラムでは、ファイルからのデータの読み取りには、fscanf関数を利用している。
この関数は、scanf関数と同等な入力を、任意のストリームに対して行うものである。

なお、scanf関数とfscanf関数は、読み取りに成功した項目の個数返却する。

したがって、本プログラムのwhile文は、fscanf関数の返却値がである(名前、身長、体重)あいだ、繰り返しを続ける。これは、データが読み取れなくなる(読み取った項目数が3でなくなる)と繰り返しが終了することを意味する。

参考)新・明解C言語 入門編 第2版  柴田 望洋(著)

コメント

タイトルとURLをコピーしました