You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WHR计算C语言代码异常排查:输入任意值均返回Obesity

WHR分类标准
男性女性类别
<0.90<0.80Normalweight
0.90-0.990.80-0.84Overweight
1.0+0.85+Obesity

需求

根据输入的腰围(英寸)和臀围(英寸)计算腰臀比(WHR),并输出对应类别(Normalweight、Overweight、Obesity)。

问题代码

#include<stdio.h>
int main(){
  int a,b;
  char e;
  float d;
  scanf("%d %d",&a,&b);
  scanf("%c",&e);
  d=a/b;
  if(d<0.90 && e=='m'){
    printf("Normalweight");}
  else if(d>=0.90 && d<=0.99 ){
    if(e=='m'){
    printf("Overweight");}
  }
  else if(d>0.80 && d<0.84){
    if(e=='f'){
    printf("Overweight");}
  }else{
   printf("Obesity");}
  
}

问题排查与修复

1. 输入字符读取到换行符

第一个scanf("%d %d",&a,&b)读取完数字后,输入缓冲区会残留换行符,第二个scanf("%c",&e)会直接读取这个换行符,导致e的值不是'm'或'f',所有性别判断条件都不满足,直接进入else分支输出Obesity。

解决:在读取性别前跳过空白字符,修改第二个scanf为:

scanf(" %c",&e); // 空格会跳过换行、空格等空白字符

2. 整数除法导致WHR计算错误

a和b都是int类型,a/b执行整数除法(只保留整数部分),比如36/40会得到0而非0.9,导致WHR结果完全错误,触发错误分支。

解决:强制转换为浮点除法:

d = (float)a / b; // 将a转为float后,b自动提升为float,结果为浮点型

3. 条件分支逻辑缺失

原代码未处理女性WHR<0.80的Normalweight情况,且嵌套逻辑混乱,部分合法情况会落入else分支。

修复:先判断性别,再按性别匹配WHR区间,逻辑更清晰。

修复后的完整代码

#include<stdio.h>
int main(){
  int waist, hip;
  char gender;
  float whr;

  // 读取腰围、臀围,跳过空白后读取性别
  scanf("%d %d", &waist, &hip);
  scanf(" %c", &gender);

  // 计算腰臀比:强制浮点除法
  whr = (float)waist / hip;

  if(gender == 'm'){
    if(whr < 0.90){
      printf("Normalweight");
    } else if(whr >= 0.90 && whr <= 0.99){
      printf("Overweight");
    } else {
      printf("Obesity");
    }
  } else if(gender == 'f'){
    if(whr < 0.80){
      printf("Normalweight");
    } else if(whr >= 0.80 && whr <= 0.84){
      printf("Overweight");
    } else {
      printf("Obesity");
    }
  } else {
    printf("Invalid gender input");
  }

  return 0;
}

测试示例

  • 输入:36 40 m → WHR=0.9 → 输出Overweight
  • 输入:32 40 f → WHR=0.8 → 输出Overweight
  • 输入:30 40 m → WHR=0.75 → 输出Normalweight
  • 输入:36 40 f → WHR=0.9 → 输出Obesity

内容的提问来源于stack exchange,提问作者velavan suresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:57:36