構造体の使用手順については理解できましたか。
ここでは構造体の使用例として、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