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

C++中if/else if/else语句无法输出cout结果的问题排查

问题分析与修复

核心问题:字符与整数的类型不匹配

你定义的mExercise是char类型,当用户输入数字1-6时,程序实际存储的是对应的ASCII字符(比如输入1存的是'1',ASCII值为49),但你的判断条件里是和整数1-6比较,两者永远不相等,所以所有分支都不会触发,直接走到else输出无效输入。

修复步骤

  1. 修正类型匹配问题:

    • 方案一:把mExercise的类型改成int,这样输入的数字会直接以整数形式存储,和判断条件的整数匹配。
    • 方案二:保持char类型,但判断时和字符常量比较,比如mExercise == '1'而不是mExercise == 1。
  2. 修复精度丢失问题:
    metricResult定义为int,但计算式里包含浮点数运算(比如mAge * 6.5),直接赋值给int会截断小数部分,导致结果不准确,应该改成double类型。

  3. 消除重复代码:
    所有分支里的基础代谢率计算完全一样,可以提前计算一次,再根据运动系数相乘,减少冗余。

优化后的代码

void metric()
{
    double mWeight;
    double mHeight;
    double mAge;
    int mExercise; // 改成int类型,和输入数字匹配
    double baseResult; // 用double存储基础值,避免精度丢失

    cout << "Please type in your age: ";
    cin >> mAge;

    cout << "Please type in your weight: ";
    cin >> mWeight;

    cout << "Please type in your height: ";
    cin >> mHeight;

    cout << "Finally, please select an exercise program that most closely matches yours.\n\n1) No exercise.\n\n2) 1-2 hours a week.\n\n3) 3-5hours a week.\n\n4) 6-10 hours a week\n\n5) 11-20 hours a week.\n\n6) 20+ hours a week.\n\n";
    cin >> mExercise;

    // 提前计算基础值,避免重复代码
    baseResult = (mWeight * 11) + (mHeight * 8) - (mAge * 6.5) + 66;

    if (mExercise == 1)
    {
        cout << baseResult << "\n\n";
    }
    else if (mExercise == 2)
    {
        cout << baseResult * 1.1 << "\n\n";
    }
    else if (mExercise == 3)
    {
        cout << baseResult * 1.25 << "\n\n";
    }
    else if (mExercise == 4)
    {
        cout << baseResult * 1.35 << "\n\n";
    }
    else if (mExercise == 5)
    {
        cout << baseResult * 1.5 << "\n\n";
    }
    else if (mExercise == 6)
    {
        cout << baseResult * 1.7 << "\n\n";
    }
    else
    {
        cout << "Invalid input. Please try again.\n\n";
    }
}

额外说明

如果坚持用char类型存储输入,只需把判断条件改成字符常量即可,比如:

if (mExercise == '1')
// 其他分支同理改成'2'、'3'...'6'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:01:14