如何打破内部for循环并返回parent for循环

时间:2013-09-26 10:10:31

标签: c++ c

我这里有代码,

for(int i=0;i<5;i++)
{
    for(int j=0;j<5;j++)
    {
        //checking some conditions here for true or false
        if(false)
        {
            break out of this for loop;
        }
        else if(true)
        {
            printf("true");
        }
    }
}

我想打破内部for循环并继续外循环。我试图使用break,但控件也移出了父级for循环。

对此有何解决方案?

7 个答案:

答案 0 :(得分:7)

  

我尝试使用break,但控件也移出了父级for循环。

你一定很困惑。 break只会突破最里面的循环/开关,所以它不能也已经停止了外循环(除非偶然外循环在最后一次迭代中,这给了你这个假象)。

如果您对此有疑问,可以使用调试器单步执行代码,或者至少在代码中插入“tracing”输出,以便您可以验证它实际执行的操作:

for(int i=0;i<5;i++)
{
    printf("outer loop %d\n", i);
    for(int j=0;j<5;j++)
    {
        printf("inner loop %d\n", j);
        //checking some conditions here for true or false
        if(false)
        {
            printf("breaking out of inner loop\n");
            break;
        }
        else if(true)
        {
            printf("true in inner loop\n");
        }
    }
    printf("finishing the outer loop %d\n", i);
}

答案 1 :(得分:1)

  

6.8.6.3中断声明

     

约束

     

1 break语句只能出现在开关体或循环体中。

     

语义

     

2 break语句终止执行最小的封闭开关或迭代   言。

引自ISO / IEC 9899:TC3

所以你的休息应该有效,因为你没有使用任何pre alpha编译器。

但问题更多

if (false) //will never be executed, as false is ever fals
{
    //code gets never invoked
}

因此您不会因为从未调用break;

而爆发

答案 2 :(得分:0)

如果在内循环中使用break,那么它肯定会将控件移动到外循环。

我认为您可能缺少的是在退出内循环后重置错误状态。

答案 3 :(得分:0)

Break仅会中断使用它的循环 并且如果该条件为假则不会执行

答案 4 :(得分:0)

是的,您的代码是正确的,它必须按预期工作。 除非你编译了这个并执行另一个。 : - )

答案 5 :(得分:0)

尝试使用标志并在for循环条件中检查它。

int stop = 0;

for (int i = 0; !stop && i < 5; ++i) {
    for (int j = 0; j < 5; ++j) {
        if (false) {
            stop = 1;
            break;
        }
        // Condition when true does not need 'else' if breaking.
    }
}

答案 6 :(得分:-1)

当你想要从内部循环中突破时,它都基于逻辑。请考虑以下步骤。

Do
    For Int x = 1 To 10
        Do
            Break, Break, Break
        Loop
    Next x
Loop

尝试重新考虑您的程序逻辑并使用标志实现break语句。

如果你愿意,你可以通过使用goto语句打破内部循环来克服。

int num[5][5][5];

for (int x = 0; x < 5; x++)
{
    for (int y = 0; y < 5; y++)
    {
        for (int z = 0; z < 5; z++)
        {
            if (num[x][y][z] == 256)
            {
                cout << "Number has been found at location: " << x << y << z;
                //break the three for loops here, it's unnecessary to check any other locations
                goto finish;
            }
        }
    }
}
finish: