main()
{
float weight,height,s_weight,fatness;
int sex,count,keisu,y_cnt,f_cnt,k_cnt,c_cnt,n_cnt;
y_cnt=f_cnt=k_cnt=c_cnt=n_cnt=0;
printf("*** 肥満度プログラム ***\n");
for(count=1;count<=10;count++)
{
printf("あなたの体重(Kg単位)=\n");
scanf("%f",&weight);
printf("あなたの身長(m単位)=\n");
scanf("%f",&height);
printf("あなたの性別(男=0/女=1)=\n");
scanf("%d",&sex);
if(sex==0)
keisu=22;
else
keisu=20;
if(height>0 && weight>0)
{
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100;
printf("肥満度=%f%\n",fatness);
if(fatness<-10.0)
{
printf("やせすぎです。\n");
y_cnt++;
}
else
if(-10.0<=fatness && fatness<10.0)
{
printf("標準です。\n");
f_cnt++;
}
else
if(10.0<=fatness && fatness<20.0 )
{
printf("過体重です。\n");
k_cnt++;
}
else
if(20.0<=fatness)
{
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
else
printf("計算できません。\n");
n_cnt++;
}
}
printf("*** 肥満度統計結果 ***\n");
printf("やせすぎ=%d人\n",y_cnt);
printf("普通=%d人\n",f_cnt);
printf("過体重=%d人\n",k_cnt);
printf("超過体重=%d人\n",c_cnt);
printf("計算できない人=%d人\n",n_cnt);
}
これを実行すると、10回それぞれ身長や体重を入力していくのですが、”計算できない人”が毎回加算されてしまい、”計算できない人=10”と出てしまします。他のやせすぎとか過体重などはちゃんと計算してくれるんです。どのようにしたら、ちゃんと”計算できない人”を計算してくれるのでしょうか?
No.1ベストアンサー
- 回答日時:
ぱっと見ただけなので、違っていたらごめんなさい。
たぶん、後半にある
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
else
printf("計算できません。\n");
n_cnt++;
}
}
printf("*** 肥満度統計結果 ***\n");
の、最後のelseのところが問題ではないかと思います。
この書き方だと、elseに続くのは
>printf("計算できません。\n");
の1文だけであり、その下の
>n_cnt++;
は、elseと関係ない文になっています。
全体のif文の外側になってます。
これを直すには、{}を使い、
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
else
{
printf("計算できません。\n");
n_cnt++;
}
}
}
printf("*** 肥満度統計結果 ***\n");
として
printf("計算できません。\n");
と
n_cnt++;
をグループにまとめてやります。
No.4
- 回答日時:
if文の入れ子は間違いやすいので、{ } を使って明確にすると良いです。
if(sex==0){keisu=22;}
else{keisu=20;}
if(height>0 && weight>0){
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100;
printf("肥満度=%f%\n",fatness);
if(fatness<-10.0){y_cnt++; printf("やせすぎです。\n");}
else{
if(-10.0<=fatness && fatness<10.0){f_cnt++; printf("標準です。\n");}
else{
if(10.0<=fatness && fatness<20.0 ){k_cnt++; printf("過体重です。\n");}
else{
if(20.0<=fatness){c_cnt++; printf("あなたは超過体重ですわ!\n");}
else{n_cnt++; printf("計算できません。\n");}
}
}
}
}
No.3
- 回答日時:
if~elseのネストが深くなると対応関係が分かりにくくなります。
if と else のあとは必ず{ を入れるようにすると間違いを減らせると思います。ネストさせないようにこんな書き方もできます。。参考まで
#define KUBUN 4
float limit[KUBUN-1]={-10.0,10.0,20.0};
char *mes[KUBUN+1]={"やせすぎです。",
"標準です。",
"過体重です。",
"あなたは超過体重ですわ!",
"計算できません。"};
char *mes2[KUBUN+1]={"やせすぎ",
"普通",
"過体重",
"超過体重",
"計算できない人"};
int main(void)
{
float weight,height,s_weight,fatness;
int sex,count,keisu;
int i,p;
int cnt[KUBUN+1];
/* カウンタクリア */
for (i=0; i<=KUBUN; i++) cnt[i]=0;
printf("*** 肥満度プログラム ***\n");
for(count=1;count<=10;count++)
{
printf("あなたの体重(kg単位)=\n");
scanf("%f",&weight);
printf("あなたの身長(m単位)=\n");
scanf("%f",&height);
printf("あなたの性別(男=0/女=1)=\n");
scanf("%d",&sex);
keisu = (sex==0)?22.0:20.0;
if(height>0 && weight>0)
{
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100.0;
printf("肥満度=%f%\n",fatness);
/* 基準値と比較してメッセージ表示&カウントアップ */
for (p=0,i=0; i<KUBUN-1; i++) {
if (fatness>=limit[i]) {
p++;
}
}
printf("%s\n",mes[p]);
cnt[p]++;
} else {
printf("%s\n",mes[KUBUN]);
cnt[KUBUN]++;
}
}
printf("*** 肥満度統計結果 ***\n");
for (i=0; i<=KUBUN; i++) {
printf("%s=%d人\n",mes2[i],cnt[i]);
}
return 0;
}
No.2
- 回答日時:
問題はもう少し根深いようです。
以下で正しいハズです。
あと、
if(fatness<-10.0)
{
printf("やせすぎです。\n");
は、
if(fatness<=10.0)
の間違いでは?
なるべく丁寧に見直すようにして下さい。
あるいは、カッコの大枠を先に書いてから中身を書くようにするのも一つの手です。もちろんインデントは必須。
main()
{
float weight,height,s_weight,fatness;
int sex,count,keisu,y_cnt,f_cnt,k_cnt,c_cnt,n_cnt;
y_cnt=f_cnt=k_cnt=c_cnt=n_cnt=0;
printf("*** 肥満度プログラム ***\n");
for(count=1;count<=10;count++)
{
printf("あなたの体重(Kg単位)=\n");
scanf("%f",&weight);
printf("あなたの身長(m単位)=\n");
scanf("%f",&height);
printf("あなたの性別(男=0/女=1)=\n");
scanf("%d",&sex);
if(sex==0)
keisu=22;
else
keisu=20;
if(height>0 && weight>0)
{
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100;
printf("肥満度=%f%\n",fatness);
if(fatness<-10.0)
{
printf("やせすぎです。\n");
y_cnt++;
}
else
if(-10.0<=fatness && fatness<10.0)
{
printf("標準です。\n");
f_cnt++;
}
else
if(10.0<=fatness && fatness<20.0 )
{
printf("過体重です。\n");
k_cnt++;
}
else
if(20.0<=fatness)
{
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
}
else
{
printf("計算できません。\n");
n_cnt++;
}
}
printf("*** 肥満度統計結果 ***\n");
printf("やせすぎ=%d人\n",y_cnt);
printf("普通=%d人\n",f_cnt);
printf("過体重=%d人\n",k_cnt);
printf("超過体重=%d人\n",c_cnt);
printf("計算できない人=%d人\n",n_cnt);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
複素数の四則計算
-
台形の面積を求めるプログラム
-
三角形の判別
-
printf で二進表示を行いたい。
-
答えを教えてください
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
円の面積を求めるプログラミン...
-
値を変数に代入してprintfで表...
-
C言語での組み合わせの問題につ...
-
LU分解法のピボット選択機能実...
-
printfの変換仕様について
-
printf( " %2d", p * q );
-
オーバーフローについて。
-
strcmp
-
(C言語)めちゃくちゃな値にな...
-
10進数を2進数に変換するには・...
-
switch分のケースを範囲数?に...
-
3つの入力した数値の大小比較...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
テキストカーソル位置の取得
-
【C言語教えてください】sin波...
-
10個出力で改行したいのですが...
-
4の倍数を論理演算で表す。。
-
コマンドラインに出力した文字...
-
strcmp
-
c言語でAからZまでを表示する...
-
printfの出力内の文字をdefine...
-
WM_CLOSEで閉じれないウィンド...
-
三角形の判別
-
%P と %X の違い
-
台形の面積を求めるプログラム
-
switch分のケースを範囲数?に...
-
wsprintfの書式制御文字列につ...
-
(C言語)めちゃくちゃな値にな...
-
error C2143: 構文エラー : ';'...
-
円の面積を求めるプログラミン...
おすすめ情報