如何使用switch case语句来退出外层循环?

3

这不是我实际尝试解决的特定问题,但我想到了一个简单的例子来说明我不知道如何做到这一点:

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

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

如果我们想要在case 1中跳出while循环,该怎么做呢?

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

我们也不能在while循环中无条件地使用break,因为这会发生在任何情况下。

难道我们只能在while循环中写if (some_var == 1) break;,否则向while条件中添加&& !flag,并设置flag = 1吗?


goto会起作用,虽然不太美观。 - herohuyongtao
你使用的是哪种编程语言? - takendarkk
抱歉 @Takendarkk,已添加 C++。 - OJFord
1
如果我们想要在情况1下跳出循环,我们该怎么做?重新设计代码使其更加清晰。 - James Kanze
@aaronjameskanze a) 这就是我要求建议的原因;b) 无论如何,我希望能得到如何实现它的建议。 - OJFord
显示剩余5条评论
3个回答

3

以下是按照适当性的大致顺序提供的各种选项:

  • 将循环移到单独的函数中。使用 return 来停止循环。
  • while(1) 替换为 while(looping),并将其设置为 false 以停止循环。如果需要跳过当前迭代的剩余部分,请使用 continue
  • 使用 goto 跳过循环的末尾。有多糟糕呢?
  • try 块包围循环,并使用 throw 抛出某些内容以停止循环。

1
你可以使用 goto(但不要滥用 goto)。
while ( ... ) {
   switch( ... ) {
     case ...:
         goto exit_loop;

   }
}
exit_loop: ;

2
哇,我甚至不知道 goto 存在。谢谢。 - OJFord
在很多地方,如果你使用goto语句,你将被送进监狱,不会通过Go点,也不会获得200美元。 - Vaillancourt
只要我不滥用 goto,就没问题。 :) - herohuyongtao

0

在循环中使用一个变量并对其进行修改。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接