たなしょのメモ

日々勉強していることをつらつらと

C++に挑戦してみよう。ファイルとストリーム 3日目

コード

#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);
}

if*1 == NULL){
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"