先のブログでは、fgets関数を使用することで、テキストファイルの中身を一行ずつ読み込むことができた。
今回は、テキストファイルの中身を読み込む関数のもう一つの例として、fscanf関数を取り上げる。
各行に数字が書かれたテキストファイルを読み込み、それぞれの値を足して表示するプログラムをご紹介しよう。
なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.91.1)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。
読み込むテキストファイル
25
34
56
77
90
112
21
//数字が書かれたテキストファイルを読み込み、それぞれの値を足して表示するプログラム
#include <stdio.h>
int main(void)
{
FILE* fp = NULL;
char line[128];
fp = fopen("scores.txt","r");
if (fp == NULL) {
printf("ファイルを開けませんでした。\n");
return 1;
}
int total = 0;
int i;
while (fscanf(fp,"%d",&i) != EOF)
{
printf("%dを読み込みました。\n",i);
total += i;
}
printf("合計は%dです。\n",total);
fclose(fp);
return 0;
}
実行結果
25を読み込みました。
34を読み込みました。
56を読み込みました。
77を読み込みました。
90を読み込みました。
112を読み込みました。
21を読み込みました。
合計は415です。
fscanf関数は、変換指定を使って読み込む。ここでは、”%d”としているので、文字列を整数として読み込む。
読み込む値がなくなると、EOFという値を返す。
読み込んだ値は、変数iに格納され、それを変数totalに加算して合計を求めている。
(参考)「C言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著) 翔泳社
コメント