PROG 12.2 構造体の配列

問題

[実行結果]
Please input | name gender age (以下、4人分を連続入力)
hanyu m 19 
kasai m 41
takeuchi f 30
onoduka f 25
^Z (control zとENTER) (UNIXでは、control d)
0 人目:name = hanyu gender = m age = 19 (配列の要素、NINGEN型データをプリント) 
1 人目:name = kasai gender = m age = 41
2 人目:name = takeuchi gender = f age = 30
3 人目:name = onoduka gender = f age = 25
END

[構造体] [構造体の配列] [構造体メンバーへのアクセス]
  • 以下の構造体を用いよう。structで始まる部分がnigen構造体を定義。
  • typedefは、ningen構造体をNINGEN型と定義
typedef struct ningen {
   char name[31];
   char gender;
   int age;
} NINGEN;
10名分の情報を登録できるよう、NINGENを要素とする配列、listを宣言する。
NINGEN list[10]; /* list[0]からlist[9]まで、10人分 */
配列の各要素がningen構造体
例:list[0]の構造体の、各メンバーの値をプリントするには
printf("%s, %c, %d", list[0].name, list[0].gender, list[0].age);

[プログラム]


#include <stdio.h>

/* NINGEN 型 ningen 構造体 */
typedef struct ningen {
   char name[31];
   char gender;
   int age;
} NINGEN ;


int main (void) {

    NINGEN list[10];
    int i,j;

    i = 0;
    j = 0;

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

    /* 入力部 */
    while ((i < 10 && scanf("%s %c %d", list[i].name, &list[i].gender, &list[i].age) != EOF)) {
       i++;
    }

    /* 出力部 */

    while ( j < i ) {
        printf ("%2d 人目:name = %s gender = %c age = %d\n",j, list[j].name,list[j].gender,list[j].age );
        j++;
    }


    printf ("END \n");

    return(0);
}