PROG 13.2 構造体を要素にする配列の動的生成 - 個数指定

問題

[実行結果]
length of data :3 (← データ数)
Please input | name gender age
hanyu m 19
takeuichi f 30
kasai m 41 (← ここまで入力)
0 : name = hanyu gender = m age = 19 (格納結果を出力)
1 : name = takeuichi gender = f age = 30
2 : name = kasai gender = m age = 41

[ヒント]
  • *(x+i).genderを、 (x+i) ->genderと書ける。 ->をアロー演算子という。 (p.91)

[プログラム]

#include <stdio.h>
#include <stdlib.h>

typedef struct ningen {
   char name[31];
   char gender;
   int age;
} NINGEN;


int main (void) {
   NINGEN *x;
   int i,nx;

   printf("length of data :"),
   scanf("%d", &nx);

   x = (NINGEN *)malloc(sizeof(NINGEN)*nx); /* 一括してメモリ確保 */

   printf("Please input | name gender age\n");

   i = 0;
   while (i < nx) {
     scanf("%s %c %d", x[i].name, &x[i].gender, &x[i].age);
     i++;
   }

   i = 0;
   while (i < nx) {
     printf("%d : name = %s gender = %c age = %d \n",i, x[i].name, x[i].gender, x[i].age);
     i++;
   }

   i = 0;
   while (i < nx) {
     printf("%d : name = %s gender = %c age = %d \n",i, (x+i)->name, (x+i)->gender, (x+i)->age);
     i++;
   }

   free(x);

   return (0);
}