如何将以下if =语句转换为switch语句而无需为该时间间隔(41-49)之间的每个数字创建一个案例?有可能吗?
if (num < 50 && num > 40)
{
printf("correct!");
}
答案 0 :(得分:1)
您必须枚举开关的每个案例。编译器将其转换为跳转表,因此您无法使用范围。但是,您可以使用相同的代码块来处理多个案例,这些代码块可能更接近您想要的内容。
switch(num) {
case 41:
case 42:
case 43:
case 44:
case 45:
case 46:
case 47:
case 48:
case 49:
printf("correct!");
break;
default:
break;
}
答案 1 :(得分:1)
这个怎么样?
switch ((num-41)/9) {
case 0:
printf("correct!");
break;
}
答案 2 :(得分:0)
bool criteria1 = (num < 50 && num > 40);
switch criteria1: ...
这可能导致多级决策网络......可怕吗?
答案 3 :(得分:0)
在C或C ++中(因为你使用的是printf,我会假设它就是这样),需要为每个选择枚举案例。
switch/case
和if
之间的唯一区别是编译器可以将其转换为计算goto而不是检查范围。如果switch/case
支持范围,那将无法打开这种优化的可能性。