next up previous contents
Next: 19.5 標準関数 strcpy(), sscanf() Up: 19. 構造体 II Previous: 19.3 ポインタのメンバー

19.4 構造体の配列

配列で習ったように、配列の宣言は次のように出来る。

    型   配列名[大きさ];

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

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

    struct Test gakusei[100];

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

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

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

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

例 8
        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
    ...

これらのファイルを、 a.out < data などのようにして リダイレクトを使う事で 100人分のデータを一度に読み込むことが出来る。



Noriyo Kanayama