2016-04-24 25 views
-3

我正在试图制作一个输出文件中使用最多的字符的程序。为什么编译器不让我在开关盒中使用变量?

为什么编译器给我一个错误,当我试试这个:

for (char i = 97 ; i <=122 ; i ++) { 
     switch (x) { 

       case i : 
       break; 
     } 
    } 

此代码使用一个开关,以获得最常用的字符。错误是:

'i' cannot appear in a constant-expression 
+1

因为它违反规范。 – xaxxon

+0

@xaxxon有什么方法可以修复它? –

+3

它与循环无关,'case'“参数”需要保持不变,而'i'不是。 –

回答

0

case标签必须编译时间常数,你要使用可变i,所以你得到的,而描述性错误消息。

如果您需要针对变量进行测试,则直接替换为if-else if -...- else梯形图。虽然你的简单情况没有“其他”部分,此外,break突破了switch,所以你不能用它来突破一个循环,然后(直接替换将使用goto,但它的更好地重新思考几乎所有情况下都是你的逻辑)。

所以写你这样的代码:

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

    } 
} 
+2

同样值得注意的是,OP可能认为他正在迭代'a'到'z' - 但是C++标准并不能保证这一点,事实上有些机器并不是真的。 –

+0

@hyde谢谢,我现在明白了。 (我是一个初学者) –

+0

@MartinBonner我主要是这样认为的,指出这只是无用的信息超载对于刚刚学习C++的人来说......但是这是一个教育学意见。 – hyde

0

“我”不能出现在一个常数表达式 因为编译器不明白什么是“i'.Next,你应该通过我进入 开关。 你可以做到。

相关问题