C言語のきほん「構造体(3)」

スポンサーリンク
C言語 C言語

本ブログの「構造体(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クリエイティブ

コメント

タイトルとURLをコピーしました