有大佬帮我看看哪里错了吗,刚开始自学c语言

#include <stdio.h>
int main()
{
double m,n,b;
printf("请输入你的身高和体重:");
scanf("%lf %lf",&m,&n) ;
b=n/(m*m);
if(b<18.5){
printf("偏瘦\n");
}
else{
if(18.5<b<23.9){
printf("正常\n");}
else{
printf("肥胖\n");}
}
printf("你的BMI是:%f",b) ;
return 0;
}

好像正常和肥胖不能区分

1、首先scanf输入格式不需要写空格,默认就是空格分割scanf("%lf %lf",&m,&n) ;直接写成scanf("%lf%lf",&m,&n) ;就可以了,%lf之间不需要加空格。

2、在C语言中,大于且小于,不能写成18.5<b<23.9,要写if(b>18.5 && b<23.9)。

&&表示与,意思左右两边逻辑表达式同时成立,返回1。

3、你if else,写成这样嵌套,可以,但是不建议这么写,阅读性差,运行效率也不高,不如直接写成3个if来的简单。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-21
排班不是很好看,所有不好判断其他排班导致的问题。
最明显的问题 18.5<b<23 这个判断在代码里面是没有这种写法的,也是不允许这种写法的,你的本意是判断 在18.5到23之间这个区间,那么代码应该是 (b > 18.5 && b < 23)
另外一个代码风格问题, 不知道有没有学到if(){}else if(){} else{} 这种,所有那个结果判断这么写比较合理
if(b < 18.5){

printf("偏瘦\n");

}else if (b> 18.5 && b < 23){
printf("正常\n");
}else{
printf("偏胖\n");

}
第2个回答  2019-09-21
#include <stdio.h>
int main()
{
double m,n,b;
printf("请输入你的身高和体重:");
scanf("%lf %lf",&m,&n) ;
b=n/(m*m);
if(b<18.5){
printf("偏瘦\n");
}

else if(18.5<b<23.9){
printf("正常\n");
}

else{
printf("肥胖\n");
}
printf("你的BMI是:%f",b) ;
return 0;
}
第3个回答  2019-09-21

if(18.5<b<23.9)改成if(18.5<b && b<23.9)

要把数学上的连续比较换算成几个单独比较再合理组合起来

相似回答