是否有办法开始处理案例,并在中间(未结束)中继续运行'default'。我看到我可以放弃'休息',但是在结束整个当前案例之后它继续下一个案例。 例如:
switch( X )
{
case 'A':
// Start this code
if (expression){
// Go to execute 'default'
}
// Don't run this if the expression is true
case 'B':
// code..
default :
// code..
}
(寻找除了使'默认'成为函数并从案例中调用它之外的解决方案)
答案 0 :(得分:3)
您可以使用标签:
goto default2;
如果你输入:
default2:
默认
旁边答案 1 :(得分:1)
case
语句不必按顺序排列。
switch( X )
{
case 'B':
// code..
break;
case 'A':
// code..
if (!expression){
// code
break;
}
// code..
// Fall thru
default :
// code..
}
这会移除丑陋的goto
答案 2 :(得分:1)
是否有办法开始处理案例,并在其中间(不是结束)继续运行'默认'。
是的一种方式,如geocar的正确和简洁的答案所述。但是您还应该考虑是否使用goto
来修改switch
语句中的执行流程。这不是大多数人期望看到的东西,而且要避免以令人惊讶的方式工作的代码还有很多话要说。 如果您决定执行您提出的建议,请添加一条评论,解释发生了什么以及您为何这样做。
答案 3 :(得分:0)
看起来最好通过在案例B中进行旗帜检查来处理这个问题,并让正常工作。任何其他想要避免违约的情况都会发生在案例A之前并且休息一下。
查看问题中的代码,看起来你想让案例A落入案例B(并检查表达式),然后让案例B落入默认值,以便在所有情况下都执行默认值。您似乎也不想更改开关以在交换机外移动默认值(最小更改)。
int myflag = FALSE;
switch( X )
{
case 'A':
{
// Start this code
if (expression){
myflag = TRUE;
// Now the fall through would go to default
}
}
// Don't run this if the expression is true
case 'B':
{
if (! myflag) {
// code..
}
}
default :
// code..
}
答案 4 :(得分:-1)
您可以做的最好的事情(因为您不想要函数中的默认代码)是在切换后放置默认代码,并在您希望运行默认代码时设置标志。
int runDefault = false;
switch( X )
{
case 'A':
// Start this code
if (expression){
runDefault = true;
break;
}
// This code doesn't run this if the expression is true
break;
case 'B':
// code..
break;
default :
runDefault = true;
break;
}
if ( runDefault )
{
// default code goes here
}