アキヒロの日誌

理系大学院生の戦闘記録

c言語学習10日目

今日も進捗を書いていきます。

 

今日は「苦しんで覚えるc言語」の練習問題16を解きました。

その中で書き取り問題を記事にします。

 

苦しんで覚えるC言語

苦しんで覚えるC言語

 

 

 

 

問題: 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");
}