我有两个这样嵌套的for循环:
for(...) {
for(...) {
}
}
我知道有一个break
语句。但我搞不懂它是中断了两个循环,还是只中断了被调用的那个循环?一旦我发现迭代更多的次数是没有意义的,我就需要同时打破这两种方法。
发布于 2009-05-14 12:59:09
break会中断一个循环,但您可以向外部循环添加检查,该检查会在内部循环中断时中断。
bool dobreak = false;
for ( ..; !dobreak && ..; .. ) {
for ( ... ) {
if (...) {
dobreak = true;
break;
}
}
}
发布于 2009-05-14 13:40:25
如果使用goto简化了代码,那么它将是合适的。
for (;;)
{
for (;;)
{
break; /* breaks inner loop */
}
for (;;)
{
goto outer; /* breaks outer loop */
}
}
outer:;
发布于 2009-05-14 13:13:50
break
语句只能让您跳出最内层的循环。如果您不希望在代码、内存和专用状态变量的性能方面增加额外的开销,我建议将代码重构为它自己的函数或方法,并使用return
来摆脱所有循环:
void do_lots_of_work(void)
{
int i, j;
for(i=0; i<10 ; i++)
{
for(j=0;j< 10; j++)
{
..
..
if(disaster_struck())
return; /* Gets us out of the loops, and the function too. */
}
}
}
https://stackoverflow.com/questions/863172
复制相似问题