如何退出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 循环中执行迭代器语句。