将if语句转换为switch语句

时间:2011-07-07 20:21:57

标签: if-statement case switch-statement

如何将以下if =语句转换为switch语句而无需为该时间间隔(41-49)之间的每个数字创建一个案例?有可能吗?

if (num < 50 && num > 40)
{
    printf("correct!");
}

4 个答案:

答案 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/caseif之间的唯一区别是编译器可以将其转换为计算goto而不是检查范围。如果switch/case支持范围,那将无法打开这种优化的可能性。