前提・実現したいこと
C言語初心者です。
拙いコードですが回答いただけると幸いです。
氏名、年齢、身長、体重を入力すると、BMIと標準体重、そしてBMIの値に応じて肥満度(Light,Standard,Heavy 1,....)を印字するプログラムを作成中です。
BMIと標準体重を求めて印字するまではできたのですが、肥満度を印字することができていません。(文字化けが起こります)。
このプログラムで間違っている部分はどこでしょうか。
個人的には関数fatnessにおいて、思うようにreturnできていないのが原因だと思っているのですが、デバッグできません。
お力をお貸しいただけると幸いです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
特にエラーメッセージは出ないのですが、出力結果は以下のようになります。
氏名,年齢,身長(m),体重(kg)を入力してください
Satou 22 1.8 70
21.6 71.3 フフフフ向・
実行環境はVisual Studio 2019です。
#include <stdio.h> #include <string.h> //構造体を定義 typedef struct { int age; double height, weight, BMI, standardweight; char name[20],fat[20]; }Person; //関数のプロトタイプ宣言 void calc(Person*); char* fatness(Person); int main() { Person data; printf("氏名,年齢,身長(m),体重(kg)を入力してください\n"); scanf("%s %d %lf %lf", &data.name, &data.age, &data.height, &data.weight); calc(&data); printf("%.1lf %.1lf ", data.BMI, data.standardweight); //BMIと標準体重を印字 printf("%s", fatness(data)); //肥満度を印字 } //BMIと標準体重を計算する関数 void calc(Person* data) { data->BMI = data->weight / (data->height * data->height); data->standardweight = 22 * data->height * data->height; } //BMIに応じて肥満度(文字列)を返す関数 char* fatness(Person data) { if (data.BMI < 18.5) { strcpy(data.fat, "Light"); return data.fat; //ここがおかしい..? } else if (18.5 <= data.BMI < 25) { strcpy(data.fat,"Normal"); return data.fat; } else if (25 <= data.BMI < 30) { strcpy(data.fat,"Heavy 1"); return data.fat; } else if (30 <= data.BMI < 35) { strcpy(data.fat,"Heavy 2"); return data.fat; } else if (35 <= data.BMI < 40) { strcpy(data.fat,"Heavy 3"); return data.fat; } else { strcpy(data.fat,"Heavy 4"); return data.fat; } }
回答1件
あなたの回答
tips
プレビュー