c言語学習10日目
今日も進捗を書いていきます。
今日は「苦しんで覚えるc言語」の練習問題16を解きました。
その中で書き取り問題を記事にします。
問題: 3人分の、名前、年齢、性別、を入力して表示するプログラムを作りなさい。 ただし、データは構造体で記憶することとし、 また、データの入力と表示はそれぞれ専用の関数を作って行うこととする。
自分のプログラム(解答を少し見て修正した)と解答をアップします。
自分のプログラム
↓↓↓
typedef struct
{
char name[256];
int age;
int sex;//man:0 or woman:1
}info;
info data[3];//「data」という変数名のinfo型構造体配列(3要素)の宣言
void input(info inputdata);
void output(info outputdata);
int main(void)
{
input(data);
output(data);
return 0;
}
void input(info inputdata)//関数の引数としてinfo型の配列引数を宣言
{
int i;
printf("名前と年齢と性別を入力してください\n");
for (i = 0; i < 3; i++)
{
printf("名前:");
scanf_s("%s", &inputdata[i].name, 256);
printf("年齢:");
scanf_s("%d", &inputdata[i].age);
printf("性別(1-男性、2-女性):");
scanf_s("%d", &inputdata[i].sex);
}
return;
}
void output(info outputdata)
{
int i;
for (i = 0; i < 3; i++)
{
printf("名前:%s\n", outputdata[i].name);
printf("年齢:%d\n", outputdata[i].age);
}
char sex[16];
if (data->sex == 1)
{
strcpy_s(sex, 16, "男性");
}
else
{
strcpy_s(sex, 16, "女性");
}
printf("性別:%s\n", sex);
return;
}
著者の解答
↓↓↓
typedef struct {
char name[256];
int age;
int sex;
} People;
void InputPeople(People *data);
void ShowPeople(People data);
int main(void)
{
People data[3];
int i;
for (i = 0; i < 3; i++) {
InputPeople(&data[i]);
}
for (i = 0; i < 3; i++) {
ShowPeople(data[i]);
}
return 0;
}
void InputPeople(People *data)
{
printf("名前:");
scanf("%s", data->name);
printf("年齢:");
scanf("%d", &data->age);
printf("性別(1-男性、2-女性):");
scanf("%d", &data->sex);
printf("\n");
}
void ShowPeople(People data)
{
char sex[16];
printf("名前:%s\n", data.name);
printf("年齢:%d\n", data.age);
if (data.sex == 1) {
strcpy(sex, "男性");
}
else {
strcpy(sex, "女性");
}
printf("性別:%s\n", sex);
printf("\n");
}