2013-08-29 108 views
1

C++中有以下可能吗?开关语句继续

switch (value) { 
    case 0: 
     // code statements 
     break; 
    case 1: 
    case 2: 
     // code statements for case 1 and case 2 
     /**insert statement other than break here 
     that makes the switch statement continue 
     evaluating case statements rather than 
     exit the switch**/ 
    case 2: 
     // code statements specific for case 2 
     break; 
} 

我想知道是否有办法让switch语句继续评估其余的案例,即使它遇到了匹配的案例。 (例如其他语言的continue声明)

+4

为什么你有'案例2'两次? – Barmar

+1

你是什么意思*扫描*其余案件? 'switch'就像一个'goto',只有当它到达'break'时才会停止。 – andy256

+0

@ andy256我的意思是评估。 – Dan

回答

4

简单的if怎么样?

switch (value) 
{ 
case 0: 
    // ... 
    break; 

case 1: 
case 2: 
    // common code 
    if (value == 2) 
    { 
     // code specific to "2" 
    } 
    break; 

case 3: 
    // ... 
} 
+4

如果公共代码和特定代码的顺序无关紧要,您还可以执行'案例2:{/ *代码特定于2 * /}案例1:{/ * common code * /}'。 –

+0

谢谢!我没有想到这一点! – Dan

1

是的,只是不要休息。它自然会落在其他开关语句上。

+2

'case 1'结尾的下降:case 2:'labels会处理以下'value'为'1'或'2'的语句。原来的问题似乎只是在'value'为'2'而不是'1'时处理第二个case 2:'标签。 –

2

确定案例标签后,无法让switch继续搜索其他匹配标签。您可以继续处理下列标签的代码,但这并不能区分为什么达到标签的不同原因。所以,不,没有办法限制选择。实际上,在C++中禁止使用重复的case标签。