切换外壳以打破外循环?

时间:2014-02-12 17:36:10

标签: c++ while-loop switch-statement break

这不是我实际想要实现的具体问题,但是我发现我不知道该怎么做,所以我将举一个简单的例子来说明:

假设我们有一个包含while语句的switch循环,例如:

while(some_cond){
    switch(some_var){
        case 1:
            foo();
            break;
        case 2:
            bar();
            break;
    }
}

如果我们想要break中的case 1,我会怎么做?

我们不能break; break;,因为第二个永远不会发生。

我们也无法在break循环中有条件地执行while * un *,因为这会在任何case中发生。

除了if (some_var == 1) break;循环中的while,我们别无选择,或者将&& !flag)追加到while条件,并设置flag = 1

4 个答案:

答案 0 :(得分:0)

您可以使用goto(不要过于狂野goto

while ( ... ) {
   switch( ... ) {
     case ...:
         goto exit_loop;

   }
}
exit_loop: ;

答案 1 :(得分:0)

各种选择,大致有品味:

  • 将循环移动到单独的函数中。使用return停止循环。
  • while(1)替换为while(looping)并设置为false以停止循环。如果您需要跳过当前迭代的其余部分,请使用continue
  • 使用goto跳过循环结束。 How bad can it be?
  • 使用try块环绕循环,并throw停止循环。

答案 2 :(得分:0)

请在循环中使用修改过的变量。

bool shoulEnterLoop = true;
while(shoulEnterLoop ){
  switch(some_var){
    case 1:
      if ( !foo() )
        shoulEnterLoop = false;
      break;
    case 2:
      bar();
      break;
  }
}

答案 3 :(得分:-1)

while(1){
switch(some_var){
    case 1:
        foo();
        continue 2;
    case 2:
        bar();
        break;
}
}

继续2将从2级封闭循环中找到你