Previous: 構造体の中の構造体
Up: 構造体 II
Next: 標準関数 strcpy(), sscanf()
Previous Page: 構造体の隠蔽
Next Page: 標準関数 strcpy(), sscanf()

構造体の配列

前の章では、構造体の中に配列がある場合を学習したが、配列で習ったように、 配列の宣言は次のように出来る。

型   配列名[個数1]...[個数n];

従って、この配列の型指定に、構造体型を指定することも出来る。この場合、指定 した構造体型の配列が確保できることになる。

例5
    struct Test {
        char name[]
        int zenki;
        int kouki;
    };

struct Test gakusei[100];

この例では、100個の gakusei という配列を確保しているが、一つ一つの 配列要素は、 struct Test 型である。従って、例えば、 gakuse[0] は、 name[], zenki, kouki という3つのメンバーを持つ事になる。 個々のメンバーへのアクセス方法は、次のようになる。

例6
        gets( gakusei[0].name );
        gakusei[0].zenki = 80;
        gakusei[0].kouki = 60;

この例では、最初の行で、 gakusei[0] のメンバー name[] に標準 入力から読み込んだ文字列を代入し、次の2行では、前期、後期のテストの点を 代入している。

この例から、構造体型の配列を用いる事で、複数の異なる性質のデータの集合を 扱う時に繰り返しを用いる事が出来るようになる点で、便利であることが分かる。 例えば、複数の学生の名前や、成績を読み込むには次のようにすればよい。

例7
        for ( i=0; i<100; i++ ){
            gets( gakusei[i].name );
            fflush(stdin);
            scanf("%d",gakusei[i].zenki);
            fflush(stdin);
            scanf("%d",gakusei[i].kouki);
        }

成績のデータは、次のような形式でファイルにあるとすると、

kanayama
80
70
yamada
60
75
hokusei
50
70
...

リダイレクトで100人分のデータを一度に読み込むことが出来る。

maruyama@wakhok.ac.jp
1995年02月08日 (水) 18時57分57秒 JST