是否可以使用break函数退出几个嵌套的for循环?
如果是,你会怎么做呢?你还能控制刹车出多少圈吗?
是否可以使用break函数退出几个嵌套的for循环?
如果是,你会怎么做呢?你还能控制刹车出多少圈吗?
当前回答
打破几个嵌套循环的一个好方法是将代码重构为一个函数:
void foo()
{
for(unsigned int i=0; i < 50; i++)
{
for(unsigned int j=0; j < 50; j++)
{
for(unsigned int k=0; k < 50; k++)
{
// If condition is true
return;
}
}
}
}
其他回答
我知道这是老帖子了。但我想提出一个更合理、更简单的答案。
for(unsigned int i=0; i < 50; i++)
{
for(unsigned int j=0; j < conditionj; j++)
{
for(unsigned int k=0; k< conditionk ; k++)
{
// If condition is true
j= conditionj;
break;
}
}
}
只是使用lambdas添加一个显式的答案:
for (int i = 0; i < n1; ++i) {
[&] {
for (int j = 0; j < n2; ++j) {
for (int k = 0; k < n3; ++k) {
return; // yay we're breaking out of 2 loops here
}
}
}();
}
当然,这种模式有一定的局限性,显然只适用于c++ 11,但我认为它非常有用。
break语句终止它出现的最近的封闭do、for、switch或while语句的执行。控制权转移到终止语句后面的语句。
从msdn。
Break将只退出包含它的最内层循环。
你可以使用goto来跳出任意数量的循环。
当然,goto通常被认为是有害的。
使用break函数[…]是否合适?
使用break和goto会使判断程序的正确性变得更加困难。请看这里关于这个问题的讨论:Dijkstra不是疯子。
一个使用goto和标签跳出嵌套循环的代码示例:
for (;;)
for (;;)
goto theEnd;
theEnd: