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

C++水状态判断代码无法识别负数问题排查求助

问题排查:你的C++水状态判断代码无法识别负数的原因

嘿,我一眼就发现问题出在你那个else if (0 <= a <= 100)的条件表达式上了!

核心问题:错误的条件表达式写法

在C++(以及大多数类C语言)中,不能像数学里那样连续写比较运算符。0 <= a <= 100的实际执行逻辑和你想的完全不一样:

  1. 程序会先计算左边的0 <= a,得到一个布尔值:如果a >= 0结果为true(在C++中会被隐式转换为整数1),如果a < 0结果为false(隐式转换为整数0)。
  2. 接着用这个转换后的整数值和100比较,也就是判断1 <= 100或者0 <= 100——这两个结果都是true!

所以不管a是负数还是正数,这个else if的条件都会成立,直接输出"Water",导致后面判断a < 0的分支永远没有机会执行,自然无法识别负数啦。

修正后的代码

把连续比较改成用逻辑与运算符&&连接两个独立的比较条件就可以了:

#include <iostream>
#include <string>
using namespace std;
int main() {
    int a;
    cin >> a;
    if (a > 100){
        cout << "Steam";
    }else if (0 <= a && a <= 100){ // 这里修改为正确的逻辑与判断
        cout << "Water";
    }else if(a < 0){
        cout << "Ice";
    }
    return 0;
}

另外,你还可以简化最后一个分支,直接用else代替else if(a < 0)——因为前面的条件已经覆盖了a>100和0<=a<=100的情况,剩下的必然是a<0,这样代码会更简洁:

#include <iostream>
#include <string>
using namespace std;
int main() {
    int a;
    cin >> a;
    if (a > 100){
        cout << "Steam";
    }else if (0 <= a && a <= 100){
        cout << "Water";
    }else{
        cout << "Ice";
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:02:31