c中的切换案例:从另一个案例中继续“默认”

时间:2016-01-11 21:01:00

标签: c switch-statement

是否有办法开始处理案例,并在中间(未结束)中继续运行'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..
}

(寻找除了使'默认'成为函数并从案例中调用它之外的解决方案)

5 个答案:

答案 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
}