auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語でstruct関数③ 配列

auです。
前回はstruct関数に実際にデータをいれてみました。
program-shoshinsya.hatenablog.com

今回は複数のデータを入力できるようにしたいと思います。

構造体の配列

前回は、一人の生徒しかデータを入力しませんでしたが、実際には多くの生徒が在籍しているはずです。
なので今回は、複数のデータ(生徒)を入力したいと思います。
複数の場合は配列を利用して代入し、順番に出力するようにします。
生徒は4人いるものとします。
実際にかいてみます。

#include<stdio.h>

struct student {
    int id;
    char name[30];
    int age;
    char address[30];
};

typedef struct student student_data;

int main(void) {
    student_data data[] = {
        {1, "Sato", 20, "Tokyo"}, // 0
        {2, "Tanaka", 23, "Kanagawa"}, // 1
        {3, "Takahashi", 30, "Tochigi"}, // 2
        {4, "Saito", 21, "Gunma"} //3
    };
    for (int i = 0; i < 4; i++) {
    printf("id: %d name: %s age: %d address: %s\n", data[i].id, data[i].name, data[i].age, data[i].address);
    }
    return 0;
}

// 実行結果
id: 1 name: Sato age: 20 address: Tokyo
id: 2 name: Tanaka age: 23 address: Kanagawa
id: 3 name: Takahashi age: 30 address: Tochigi
id: 4 name: Saito age: 21 address: Gunma

前回と構造体名の書き方が違うと思います。
前回は"struct student student1"と書いてました。
今回は"typedef struct student student_data;"と書いています。
"typedef"とあるのが違いであり、これは以降struct変数を定義する際にstructと入力しなくて済むようにする。つまり、"student_data data"という文だけで宣言できるので書くのが楽になります。(前回は"struct student student1"という風に書いていた)

"data[]"とすることで、配列を定義しています。配列にそれぞれの生徒のデータが0から順番に設定されていきます(上のプログラムの//0~3の部分)。
それをfor文で4回出力するプログラムになります。