#include <stdio.h>
// 構造体の宣言
struct kazoku{
char name[20];
int age;
};
struct meibo{
char name[20];
int age;
char tel[15];
char address[40];
struct kazoku family[3];
};
// 名簿を1件分表示する関数のプロトタイプ宣言
void disp(struct meibo data);
// 名前を大文字に変換する関数のプロトタイプ宣言
void makeupper1(struct meibo* p);
struct meibo makeupper2(struct meibo data);
//
// メイン関数
void main(){
struct meibo classmate[] = {
{ "abe natsuni" , 19, "012-3456-7890", "hokkaido uncharakanchara 1-2-3", {"taro", 20} },
{ "gotoh mai" , 19, "0987-654-3210", "tokyo nancharakanchara 9-8-7" , {{"ichoro", 22}, {"jiro", 23}} },
{ "nakazava yuko", 19, "090-1234-5678", "kanagawa hogehoge 1234-5678" },
};
int i, size = sizeof(classmate) / sizeof(struct meibo);
// abe natsuniを大文字にする(アドレス渡し)
makeupper1(&classmate[0]);
// gotoh maiを大文字にする(値渡し)
classmate[1] = makeupper2(classmate[1]);
// 表示する
for ( i = 0 ; i < size ; i++ )
disp(classmate[i]);
}
//
// 名簿を1件分表示する関数
void disp(struct meibo data){
struct kazoku* p;
// 空データなら表示しない
if ( data.name[0] == '\0' )
return;
printf("name : %s\n", data.name);
printf("age : %d\n", data.age);
printf("tel : %s\n", data.tel);
printf("address : %s\n", data.address);
// 家族を表示する
for ( p = data.family ; p->name[0] != '\0' ; p++ )
printf("family : name : %s, age : %d\n", p->name, p->age );
printf("\n");
}
//
// 名前を大文字に変換する関数(アドレス渡し)
void makeupper1(struct meibo* p){
char *pname = p->name;
while( *pname ){
*pname = toupper(*pname);
pname++;
}
}
//
// 名前を大文字に変換する関数(値渡し)
struct meibo makeupper2(struct meibo data){
char *pname = data.name;
while( *pname ){
*pname = toupper(*pname);
pname++;
}
return data;
}
|