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