コード
#include <time.h>
#include <stdio.h>
typedef struct {
char name[100];
double height;
double weight;
} Student;
int main(void)
{
FILE *fp;
int num;
Student std[num];
char name[100];
double weight, height;
printf("人数を入力して下さい:");
scanf("%d", &num);
for(int i = 0; i < num; i++){
printf("----%d人目----\n", i + 1);
printf("名前:");
scanf("%s", std[i].name);
printf("身長:");
scanf("%lf", &std[i].height);
printf("体重:");
scanf("%lf", &std[i].weight);
}
printf("\aファイルをオープン出来ません。\n");
} else{
printf("入力されたデータを書き出しました。\n");
for(int i = 0; i < num; i++){
fprintf(fp, "%-10s %5.1lf %5.1lf\n", std[i].name, std[i].height, std[i].weight);
}
fclose(fp);
}
return 0;
}
処理の流れ
まず、構造体を作成する。
タグ名:Student
データ型:char メンバ名:name
データ型:double メンバ名:height
データ型:double メンバ名:weight
次にmain関数に入り変数を宣言。
データ型:FILE型へのポインタ型(いまいち理解できてない汗)変数名:fp
データ型:int 変数名:num
データ型:Student 変数名:std 要素数:num
データ型:int 変数名:height、weight
1.numに対して標準出力で値を代入する。
2.for文でnum-1回ループを回す。
3.構造体の要素数ごとに、name、height、weightを代入する。
4.if文に突入し、test_datに書き込みをリクエスト。もしファイルが開けない場合は「ファイルをオープン出来ません。」と出力される。
5.ファイルがオープンできたらfor文でnum-1回ループさせ、要素数ごとにname、height、weightの中身をファイルに書きだす。(fprintf)
6.ファイルを閉じて終わり。
所感
うーん。やっぱりいまいちポインタを理解できてないなぁ。
各値を代入するところも、文字列とdouble型等の数字では扱いが違うことを忘れてstd[i].heightにして怒られるし。。。精進せねば。
ではでは。
*1:fp = fopen("test_dat", "w"