本ブログの「構造体(1)」で、定義した構造体に対して、Studentというtypedef名を与えた上で、名前と身長と体重を読み込んで、その値をメンバとしてもつStudent型の値を返却するプログラムを作成してみよう。
なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.90.2)を使用して作成し、gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0でコンパイルしている。
//学生の身長と体重を更新(構造体にtypedef名を導入)
#include <stdio.h>
#define NAME_LEN 64
//学生を表す構造体
typedef struct student
{
char name[NAME_LEN]; //名前
int height; //身長
float weight; //体重
}Student;
//キーボードから名前と身長と体重を読み込んでStudent型の値として返却
Student scan_Student()
{
Student temp;
printf("名前:"); scanf("%s",temp.name);
printf("身長:"); scanf("%d",&temp.height);
printf("体重:"); scanf("%f",&temp.weight);
return temp;
}
//学生の体重が0以下であれば、標準体重を代入する
void set_stdweight(struct student *s)
{
if(s->weight <= 0)
s->weight = (s->height - 100) * 0.9;
}
int main(void)
{
Student std = scan_Student();
set_stdweight(&std); //標準体重を代入
printf("名前=%s\n",std.name);
printf("身長=%d\n",std.height);
printf("体重=%.1f\n",std.weight);
return 0;
}
実行結果
名前:Sakuya
身長:170
体重:0
名前=Sakuya
身長=170
体重=63.0
本プログラムでは、typedef宣言を利用することで、「struct student」に対して、「Student」というtypedef名を与えている。そのため、「Student」が型名として扱えるようになる。
関数scan_Studentは、Student型の変数tempの3個のメンバにキーボードから読み込んだ上で、そのtempを返却する。
(参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著)、 由梨かおる(著)SBクリエイティブ
コメント