先回に引き続き、ファイルにデータを書き込むプログラムをご紹介しよう。
キーボードから、名前、身長と体重を読み込んで、それらをファイルに書き込むプログラムである。
なお、本プログラムは、
Windows 11 Home(23H2)上で、 Visual Studio Code(1.92.2)を使用して作成し、gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0で コンパイルしている。
//身長と体重と読み込んでファイルに書き込むプログラム
#include <stdio.h>
#include <string.h>
#define NAME_LEN 100
int main(void) {
FILE *fp;
if((fp = fopen("height-weight2.dat","w")) == NULL) //オープン
printf("ファイルをオープンできません\n");
else {
char name[NAME_LEN]; //名前
double height; //身長
double weight; //体重
for (int i = 0; ; i++)
{
int flag;
printf("%d人目のデータを入力しますか(YES-1/NO-0)\n",i+1);
scanf("%d",&flag);
if(flag == 0) break;
printf("名前:"); scanf("%s",name);
printf("身長:"); scanf("%lf",&height);
printf("体重:"); scanf("%lf",&weight);
fprintf(fp,"%s %f %f\n",name,height,weight);
}
fclose(fp); //クローズ
}
return 0;
}
実行結果
1人目のデータを入力しますか(YES-1/NO-0)
1
名前:Ueda
身長:150.0
体重:45.7
2人目のデータを入力しますか(YES-1/NO-0)
1
名前:Asano
身長:167.0
体重:56.7
3人目のデータを入力しますか(YES-1/NO-0)
1
名前:Tanaka
身長:175.0
体重:68.5
4人目のデータを入力しますか(YES-1/NO-0)
1
名前:Wada
身長:182.0
体重:75.2
5人目のデータを入力しますか(YES-1/NO-0)
1
名前:Nishida
身長:155.0
体重:50.3
6人目のデータを入力しますか(YES-1/NO-0)
0
書き出し後のファイルの内容
Ueda 150.000000 45.700000
Asano 167.000000 56.700000
Tanaka 175.000000 68.500000
Wada 182.000000 75.200000
Nishida 155.000000 50.300000
ファイルへの書き込みに使っているfprintf関数は、標準出力ストリームへの出力を行うprintf関数と同様の処理を任意のストリームに対して行う関数である。
使い方は、例えば、ストリームfpに対して、整数値xの値を10進数で書き込むには、
fprintf(fp,"%d",x);
のように行う。
(参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著)、 由梨かおる(著)
コメント