switch不同常量但是所对应的结果相同可以采用一个case吗?

switch不同常量但是所对应的结果相同可以采用一个case吗?

可以的,如有用,请采纳,谢谢

switch (num) {
  case 1:
  case 2:
  case 3:
    printf("Number is 1, 2 or 3\n");
    break;
  default:
    printf("Number is not 1, 2 or 3\n");
    break;
}

可以
这种情况叫做case穿越,比如
case 1:
case 2:
你的代码
break;
case 3:
case 4:
case 5:
...

下面是一个使用switch语句处理不同常量但所对应结果相同的实例,假设有一个枚举类型表示一周的天数:


```c++
enum Weekday {
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday
};


如果我们需要根据一周中的某一天来输出相应的提示信息,假设周一到周五输出"工作日",周六和周日输出"周末",可以这样写:
void printDayType(Weekday day) {
  switch (day) {
    case Monday:
    case Tuesday:
    case Wednesday:
    case Thursday:
    case Friday:
      std::cout << "工作日" << std::endl;
      break;
    case Saturday:
    case Sunday:
      std::cout << "周末" << std::endl;
      break;
    default:
      std::cout << "无效的输入" << std::endl;
      break;
  }
}


```
在这个例子中,周一到周五对应的结果是相同的,因此可以使用一个case来处理它们,而周六和周日也对应相同的结果,同样使用一个case来处理它们。

但是需要注意以下两点:

不同的常量必须具有相同的类型。switch语句中的表达式的值与case标签中的常量值进行比较,如果它们的类型不同,会出现类型转换问题。

代码的可读性和可维护性。虽然使用一个case可以达到相同的结果,但是对于其他开发人员或自己未来阅读代码时,理解代码的意图可能会更加困难。因此,如果不同的常量对应的结果相同,建议使用多个case语句来明确表达代码的意图,增加代码的可读性和可维护性。

综上所述,虽然可以使用一个case来处理不同常量但是所对应的结果相同的情况,但是建议根据实际情况来决定是否使用多个case。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7523243
  • 你也可以参考下这篇文章:声明不能包含标签 运用switch结构出现的错误
  • 除此之外, 这篇博客: switch函数的使用中的 switch…case函数: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    int main(){
        int a;
        cout<<"Input date, please:"<<endl;
        cin>>a;
        switch(a){
            case 1: printf("Monday\n"); break;
            case 2: printf("Tuesday\n"); break;
            case 3: printf("Wednesday\n"); break;
            case 4: printf("Thursday\n"); break;
            case 5: printf("Friday\n"); break;
            case 6: printf("Saturday\n"); break;
            case 7: printf("Sunday\n"); break;
            default:printf("error\n"); break;
        }
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^