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

C++使用逻辑运算符编写switch语句出现构建错误如何解决?

代码问题说明
  • 语法不符合switch规则:C++规定case关键字后必须接编译期可确定的整型常量,你将Hours == 40这类运行时才能得到结果的逻辑判断写在case后,属于语法错误,直接触发编译失败。
  • 括号配对错误:return 0前多写了一个多余的左大括号{,代码整体括号不闭合,是构建报错的直接原因之一。
  • 逻辑完全不匹配:你当前写的case 1、case 2、case 3只会在Hours等于1、2、3时才进入对应分支,和你要判断的区间需求完全不符。
修正后的实现(使用switch完成区间判断)

你可以利用switch(true)的写法实现需求,原理是布尔值属于整型的子类(true对应1,false对应0),只要每个case后接返回布尔值的表达式,就能匹配到条件成立的分支:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int Hours;
    cout << "请输入本周工作时长:";
    cin >> Hours;
    // 先校验输入合法性,工作时长不能为负数
    if (Hours < 0) {
        cout << "输入无效,请联系经理或重试";
        return 0;
    }
    switch (true)
    {
    case Hours == 40:
        cout << "本周为全勤工作";
        break;
    case Hours <= 30:
        cout << "本周工作时长不足40小时,公告板有可认领的班次";
        break;
    case Hours > 30 && Hours < 40:
        cout << "你本周时长接近40小时,可查看公告板确认是否有剩余班次,注意不要超过40小时";
        break;
    default: 
        cout << "输入无效,请联系经理或重试";
    }
    return 0;
}

如果你需要使用原生标准switch语法不依赖switch(true),也可以利用case穿透特性实现,仅适合区间范围较小的场景:

// 仅展示switch分支部分
switch(Hours) {
    case 40:
        cout << "本周为全勤工作";
        break;
    // 0到30的所有取值都走同一个分支
    case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:
    case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19:
    case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29:
    case 30:
        cout << "本周工作时长不足40小时,公告板有可认领的班次";
        break;
    // 31到39的所有取值走同一个分支
    case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39:
        cout << "你本周时长接近40小时,可查看公告板确认是否有剩余班次,注意不要超过40小时";
        break;
    default:
        cout << "输入无效,请联系经理或重试";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:03