如何在没有goto的情况下退出嵌套的while()或for()?
例如,如果我在函数中使用如下所示的三个循环:
void myfun(){
for (;;)
{
while( true )
{
for (;;)
{
//what is the exit code of all loop() from here?
}
}
}
}
使用break;
只能退出一个循环,
但是我如何退出所有循环呢?
循环可以通过计数器限制或无限制。
答案 0 :(得分:3)
我个人会重写代码,以便您首先没有嵌套循环。像这样:
bool myFun2
{
for (;;)
{
if(something) return true;
}
// If the loop isn't "forever", return false here?
}
bool myFun1()
{
while( true )
{
if (myFun2()) return true;
}
// return false here if needed.
}
void myfun()
{
for (;;)
{
if(myFun1()) break;
}
}
例如,这比试图确定某些exitLoop
变量设置的条件要容易得多。
答案 1 :(得分:1)
您无法在while
上下文中进行另一次中断或更改您的循环,将变量作为退出标记:
bool exit = false;
for (;;){
while (!exit){
for (;;){
exit = true;
break;
}
}
if (exit) break;
}
您的代码中有多少循环
答案 2 :(得分:0)
如果您想跳出离开该功能的function
,那么您应该使用return
。但是,如果你想跳出嵌套循环&没有超出功能,你可以throw an exception
。这种方法可以帮助您将代码分解为多个functions
。但exceptions
适用于图书馆设计师和我们应该避免使用它们太多。就个人而言,在这种情况下使用goto
是最好的事情,但是当你提出反对意见时,我就是这样说的。那么你的代码将如下所示: -
void myfun()
{
try
{
for (;;)
{
while( true )
{
for (;;)
{
if (/*some condition*/)
throw false;
}
}
}
}
catch (bool)
{
cout<<"caught";
}
// do stuffs if your code is successful that is you don't break out
}