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

C++如何检查0-15范围变量并转4位二进制,同时校验输入合法性

错误代码问题排查

你编写的代码存在几个核心语法和逻辑错误:

  • if 语句的判断条件必须用圆括号包裹,且等值判断需要用双等号==,你代码中的单等号=是赋值操作,会直接修改num的值,完全无法完成判断逻辑
  • 每个if后额外加了分号,导致if的判断逻辑和后续的cout输出完全解绑,不管条件是否成立都会执行输出
  • 无意义的嵌套结构,所有判断属于平级分支,完全不需要嵌套
  • 缺失输入校验逻辑,无法处理非数字输入、超范围数值的情况
最优实现方案(直接转4位二进制)

不需要写多条件匹配,直接通过位运算或C++标准库能力转换即可,同时附带完整输入校验逻辑,代码如下:

#include <iostream>
#include <bitset>
#include <limits>
using namespace std;

int main()
{
    int num = 0;
    cout << "Number to check:";
    cin >> num;

    // 输入校验:判断是否为合法整数
    if (cin.fail()) {
        cout << "错误:输入包含非法字符,请输入0-15之间的整数" << endl;
        // 清空错误状态和输入缓冲区
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        return 1;
    }

    // 校验数值范围
    if (num < 0 || num > 15) {
        cout << "错误:输入数值超出范围,请输入0-15之间的整数" << endl;
        return 1;
    }

    // 直接输出4位二进制,自动补前导零
    cout << bitset<4>(num) << endl;

    return 0;
}

如果你不想用bitset标准库,也可以手动通过位运算输出每一位:

// 替换上述bitset输出部分即可
for (int i = 3; i >= 0; --i) {
    cout << ((num >> i) & 1);
}
cout << endl;
多条件匹配的正确写法(不推荐,仅作示例)

如果一定要用分支匹配实现,用switch语句更清晰,不需要嵌套:

// 输入校验部分和上面一致,校验通过后执行下面的分支
switch(num) {
    case 0: cout << "0000"; break;
    case 1: cout << "0001"; break;
    case 2: cout << "0010"; break;
    case 3: cout << "0011"; break;
    case 4: cout << "0100"; break;
    case 5: cout << "0101"; break;
    case 6: cout << "0110"; break;
    case 7: cout << "0111"; break;
    case 8: cout << "1000"; break;
    case 9: cout << "1001"; break;
    case 10: cout << "1010"; break;
    case 11: cout << "1011"; break;
    case 12: cout << "1100"; break;
    case 13: cout << "1101"; break;
    case 14: cout << "1110"; break;
    case 15: cout << "1111"; break;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:45:04