为什么编译器不允许我在开关情况下使用变量?



我正在尝试制作一个输出文件中最常用的字符的程序。

为什么编译器在我尝试此操作时给我一个错误:

    for (char i = 97 ; i <=122 ; i ++) {
        switch (x) {
                case i :  
                break;
        }
    }

此代码使用开关来获取最常用的字符。错误是:

'i' cannot appear in a constant-expression

case标签需要是编译时常量,并且您正在尝试使用变量i,因此您会收到相当描述性的错误消息。

如果你需要针对变量进行测试,直接替换是if-else if-...-else梯子。虽然你的简单案例没有"else"部分,此外,break突破了switch,所以你不能用它来打破循环(直接替换是使用goto但最好在几乎所有情况下重新考虑你的逻辑)。

因此,请像这样编写代码:

for (char i = 97 ; i <=122 ; i ++) {
    if (x == i) {
       break; // did you mean to break the loop?
    }
}

最新更新