C言語学習3
昨日は体調が悪かったので勉強をサボりました。
Piscineまであまり時間が残っていないので、Piscine中も体調を崩さないよう体調管理もしっかりしていきたいところ。
今日は苦C 16章からはじめ、構造体が出てきました。
前回、16章を読んだ時は全然頭に入ってきませんでしたが、
今日読んだらちゃんと理解することができました。
前回はポインタで体力が尽きていたようです。
回答
#include <stdio.h>
#include <string.h>
typedef struct {
char name[64];
int age;
char sex[16];
} staff;
void inputStaff(staff *data, int count);
void printStaff(staff *data, int count);
int main(void) {
staff data[3];
int staffCount = sizeof(data) / sizeof(data[0]);
inputStaff(data, staffCount);
printStaff(data, staffCount);
return 0;
}
void inputStaff(staff *data, int count) {
for (int i = 0; i < count; i++) {
printf("スタッフ[%d]の名前を入力: ", i + 1);
scanf("%s", data[i].name);
printf("スタッフ[%d]の年齢を入力: ", i + 1);
scanf("%d", &data[i].age);
printf("スタッフ[%d]の性別を入力: ", i + 1);
scanf("%s", data[i].sex);
}
}
void printStaff(staff *data, int count) {
for (int i = 0; i < count; i++) {
printf("スタッフ[%d]\n", i + 1);
printf("名前: %s\n", data[i].name);
printf("年齢: %d\n", data[i].age);
printf("性別: %s\n", data[i].sex);
}
}
答え
#include <stdio.h>
#include <string.h>
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");
}
chatGPTにアドバイスを聞いてみた。
やったー、褒められた!
答えと比較して思ったことは、入力用関数と表示用関数にループを入れないでよかったなと。入力用、表示用関数は最低限の機能にして、main関数でループさせればよかったなぁと思いました。
あと今回は前回15章の練習問題での反省を生かし、最初に関数のプロトタイプ宣言をして、main関数の大まかな流れを決めてからコーディングしたのでちゃんと入力用関数、出力用関数を作ることができました。
作ってから分解すると思ってたより手間だし、main関数で大まかな流れを書いてから詳細を別の関数で作っていくとかなりスムーズに作れた。
しばらく構造体、プロトタイプ、メイン、関数の順番で書いていこうと思いました。
chatGPTのアドバイスにある入力データのバリデーションをやることも考えたけど、前回はそれを意識しすぎて疲れたので、今回は主題から逸れないように最低限の機能を書いてみた。でも必須なので今後はバリデーションについても少しずつ書いていこうと思う。
この記事が気に入ったらサポートをしてみませんか?