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
相关产品推荐
相关产品推荐

