【问题标题】:Can you `break` from multiple loops like PHP can by passing a number?你可以通过传递一个数字来从多个循环(如 PHP)中“中断”吗?
【发布时间】:2010-10-30 00:58:48
【问题描述】:

如果您在 PHP 的第三个嵌套循环中,您可以执行 break 3; 并将所有循环分成 3 个级别。

break 似乎在 C 中工作。但如果我这样做 break 3 我得到一个语法错误。我猜它不支持它。

打破多个循环的最佳方法是什么?我应该设置一个检查循环的标志 - 如果设置则中断?

还有什么更优雅的吗?

【问题讨论】:

  • @Daniel Vassallo 我认为您应该取消删除您的答案。 :)
  • 如果 Daniel Vassallo 没有,他最好的回答是:http://xkcd.com/292/
  • 因大众需求未删除:)

标签: c loops


【解决方案1】:

有时 goto 是最优雅的解决方案。

【讨论】:

    【解决方案2】:

    你可以使用goto,但是:

    【讨论】:

      【解决方案3】:

      通常的解决方案是:

      • 在每个嵌套循环中检查标志或其他状态
      • goto外循环结束后的标签
      • 重构您的代码,以便嵌套循环在它们自己的函数中。使用return 可以有效地从最外层循环中断。

      【讨论】:

        【解决方案4】:

        除了goto 之外的另一种方法是在for 循环的所有条件部分中使用共享变量。这个共享变量可以用作循环的终止开关。

        bool done = false;
        for (int i = 0; i < someNum && !done; i++ ) {
          for ( int j = 0; j < someOtherNum && !done; i++ ) {
            for ( int j = 0; j < again && !done; i++ ) { 
              if ( someCondition ) { 
                done = true;
                break;
              }
            }
          }
        }
        

        【讨论】:

          【解决方案5】:

          我也同意。 goto 有它的用途,这是主要用途之一。

          【讨论】:

            【解决方案6】:

            Steve Jessop 的答案在我准备发布答案前几秒就到了。我有一个建议要添加到他的建议中,尽管它可能不被认为是优雅的 - 抛出异常。

            【讨论】:

            • @alex: 哦,这是 C,不是吗?从技术上讲,我猜它目前没有例外,但 C++ 有。谷歌 C 和异常,你会发现一些关于如何实现异常的文章,例如这个Wikipedia write up.
            • 好吧,C 可能没有例外,但 C 有 setjmplongjmp。是的,你首先在这里听到了。 :-P(P.S. 对局部变量的任何更改都可能会被撤消,请注意。)
            • @Chris:哇,使用longjmp 来避免goto 应该获得某种奖励,以表彰他对幽默误解 Dijkstra 的杰出贡献。干得好!
            • @Steve:谢谢,我的目标是取悦! :-P +1
            猜你喜欢
            • 2019-09-19
            • 1970-01-01
            • 2021-08-26
            • 1970-01-01
            • 2010-12-29
            • 1970-01-01
            • 1970-01-01
            • 2021-11-02
            • 1970-01-01
            相关资源
            最近更新 更多