構造体の使用手順については理解できましたか。
ここでは構造体の使用例として、scanf()でのデータ入力、構造体の一括代入、構造体の入れ子について説明します。
構造体に scanf() でデータを入力する場合も通常の変数への入力と変わりありません。
各メンバの型を考えて引数を指定して行ってください。
変数のアドレスをとりだすには、'&' を変数の前に付け、配列のアドレスをとりだすには、'&' は不要です。
#include <stdio.h> struct seiseki { /* 構造体の宣言 */ int no; char name[20]; double average; }; int main(void) { int i; struct seiseki seito1, seito2[20]; /* 構造体変数と構造体配列の宣言 */ /* 構造体変数に scanf()でデータを入力 */ scanf("%d", &seito1.no); scanf("%s", seito1.name); scanf("%lf", &seito1.average); /* 構造体配列に scanf()でデータを入力 */ for(i = 0; i < 3; i++) { scanf("%d", &seito2[i].no); scanf("%s", seito2[i].name); scanf("%lf", &seito2[i].average); } /* 入力データの確認 */ printf("no:%d name:%s average:%f\n", seito1.no, seito1.name, seito1.average); for(i = 0; i < 3; i++) { printf("no:%d name:%s average:%f\n", seito2[i].no, seito2[i].name, seito2[i].average); } return 0; }
同一の型を持った構造体は一括して代入が可能です。
#include <stdio.h> struct seiseki { int no; char name[20]; double average; }; int main(void) { struct seiseki seito1 = { 5, "KASAHARA", 83.5 }; struct seiseki seito2, seito3[20]; seito2 = seito1; /* 構造体変数の一括代入 */ seito3[1] = seito1; /* seito2 と seito3[1] の各メンバには、*/ /* seito1 の内容がそのまま代入された。*/ return 0; }
struct syain_dt { /* 社員情報 */ long no; /* 社員番号 */ char name[20]; /* 氏名 */ char yaku[20]; /* 役職 */ int nensu; /* 勤続年数 */ struct kyuuyo { /* 給与 */ long kihon; /* 基本給 */ long jyutaku; /* 住宅手当 */ long kazoku; /* 家族手当 */ long sikaku; /* 資格手当 */ } kyu; };
※ 上記の構造体の全体図を図示するとつぎのようになります。
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved