Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 你能像PHP那样通过传递一个数字从多个循环中“断开”吗?_C_Loops - Fatal编程技术网

C 你能像PHP那样通过传递一个数字从多个循环中“断开”吗?

C 你能像PHP那样通过传递一个数字从多个循环中“断开”吗?,c,loops,C,Loops,如果您在PHP的第三个嵌套循环中,您可以执行break3并将所有循环分解为3个级别 break似乎在C中有效。但是如果我使用break 3我会得到一个语法错误。我想它不支持它 打破多个循环的最佳方式是什么?我应该设置一个检查循环的标志吗?如果设置了,则会中断 还有更优雅的吗 您可以使用goto,但是: 有时goto是最优雅的解决方案。我也同意。goto有它的用途,这是主要用途之一。通常的解决方案是: 在每个嵌套循环中检查的标志或其他状态 goto外循环结束后的标签 重构代码,使嵌套循环位于它们

如果您在PHP的第三个嵌套循环中,您可以执行
break3并将所有循环分解为3个级别

break
似乎在C中有效。但是如果我使用
break 3
我会得到一个语法错误。我想它不支持它

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


还有更优雅的吗

您可以使用
goto
,但是:


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

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

通常的解决方案是:

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

史蒂夫·杰索普的答案在我准备发布答案前几秒钟到达。我有一个建议要添加到his中,尽管它可能不被认为是优雅的-抛出一个异常。

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

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;
      }
    }
  }
}
booldone=false;
for(int i=0;i
@Daniel Vassallo我想你应该取消删除你的答案。:)如果Daniel Vassallo没有,他最好的回答是:由于大众需求而取消删除:)@alex:哦,这是C,不是吗?从技术上说,我想它目前没有例外,但C++确实如此。谷歌C和异常,你会发现一些关于如何实现异常的文章,例如,C可能没有异常,但C有
setjmp
longjmp
。是的,你先在这里听到的-P(注意,对局部变量的任何更改都可能会被撤销。)@Chris:Wow,使用
longjmp
避免
goto
应该获得某种奖励,因为它对幽默地误解Dijkstra做出了杰出的贡献。干得好@史蒂夫:谢谢,我的目标是取悦你-P+1