如何退出for循环中嵌套的if-else语句?(C/C++)
How to exit from nested if-else statements inside a for loop?(C/C++)
我的程序中有一个 for
循环,它是我程序的主循环,它应该实时运行。循环中也有一些 if-else
语句。我想如果任何 if
条件满足,程序退出 if-else
语句并重试 for 循环。
for(;;)
{
if(condition_one)
{
do_one();
}
else if(condition_two)
{
do_two();
}
else
{
do_three();
}
rest_of_program();
}
我试着这样写上面的代码:
for(;;)
{
if(condition_one)
{
do_one();
goto exitt;
}
else if(condition_two)
{
do_two();
goto exitt;
}
else
{
do_three();
}
exitt:
rest_of_program();
}
但是好像有问题,我的程序不能运行!我做错什么了吗?或者有更好的主意吗?
使用break
语句。它将退出 for
循环:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/break
我认为你把事情复杂化了。问题是这段代码:
for(;;)
{
if(condition_one)
{
do_one();
goto exitt;
}
else if(condition_two)
{
do_two();
goto exitt;
}
else
{
do_three();
}
exitt:
rest_of_program();
}
相当于这个:
for(;;)
{
if(condition_one)
{
do_one();
}
else if(condition_two)
{
do_two();
}
else
{
do_three();
}
rest_of_program();
}
if-else
的各个块是互斥的,无论执行哪一个,之后都会有rest_of_program
,然后继续循环。
你不能尝试一个新的 IF 语句,并将它放在你的 for 循环的顶部吗?
for(;;)
{
if(condition_one && condition_two){
continue
}
else if(condition_one)
{do_one();}
else if(condition_two)
{do_two();}
else {do_three();}
rest_of_program();
}
我认为这基本上就是您的要求。你检查两者是否都满足然后 return 到你的循环,否则你继续检查你的列表。
顺便说一句,这样做比使用 goto 有更好的方法,但是我还没有看到你的完整代码,所以很难找到一个可行的解决方案。
EDIT:正如下面 user463035818 所指出的,continue
将代替 goto。起初我有点困惑,但他是对的,它将跳过当前迭代。
因为没有提到,也可以选择使用 continue
语句重置到循环的开始 而不会 立即退出。请注意,此 将 在 for
循环中执行迭代器语句。
我的程序中有一个 for
循环,它是我程序的主循环,它应该实时运行。循环中也有一些 if-else
语句。我想如果任何 if
条件满足,程序退出 if-else
语句并重试 for 循环。
for(;;)
{
if(condition_one)
{
do_one();
}
else if(condition_two)
{
do_two();
}
else
{
do_three();
}
rest_of_program();
}
我试着这样写上面的代码:
for(;;)
{
if(condition_one)
{
do_one();
goto exitt;
}
else if(condition_two)
{
do_two();
goto exitt;
}
else
{
do_three();
}
exitt:
rest_of_program();
}
但是好像有问题,我的程序不能运行!我做错什么了吗?或者有更好的主意吗?
使用break
语句。它将退出 for
循环:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/break
我认为你把事情复杂化了。问题是这段代码:
for(;;)
{
if(condition_one)
{
do_one();
goto exitt;
}
else if(condition_two)
{
do_two();
goto exitt;
}
else
{
do_three();
}
exitt:
rest_of_program();
}
相当于这个:
for(;;)
{
if(condition_one)
{
do_one();
}
else if(condition_two)
{
do_two();
}
else
{
do_three();
}
rest_of_program();
}
if-else
的各个块是互斥的,无论执行哪一个,之后都会有rest_of_program
,然后继续循环。
你不能尝试一个新的 IF 语句,并将它放在你的 for 循环的顶部吗?
for(;;)
{
if(condition_one && condition_two){
continue
}
else if(condition_one)
{do_one();}
else if(condition_two)
{do_two();}
else {do_three();}
rest_of_program();
}
我认为这基本上就是您的要求。你检查两者是否都满足然后 return 到你的循环,否则你继续检查你的列表。
顺便说一句,这样做比使用 goto 有更好的方法,但是我还没有看到你的完整代码,所以很难找到一个可行的解决方案。
EDIT:正如下面 user463035818 所指出的,continue
将代替 goto。起初我有点困惑,但他是对的,它将跳过当前迭代。
因为没有提到,也可以选择使用 continue
语句重置到循环的开始 而不会 立即退出。请注意,此 将 在 for
循环中执行迭代器语句。