2

我这里有一个代码,

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");
        }
    }
}

我想跳出内循环并继续外循环。我试着用break,但控件也移出了父 for 循环。

有什么解决办法吗?

4

7 回答 7

9

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

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

当你有这样的疑问时,你可以使用调试器单步调试你的代码,或者至少在你的代码中插入“跟踪”输出,这样你就可以验证它的实际作用:

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);
}
于 2013-09-26T10:13:40.747 回答
1

6.8.6.3 中断语句

约束

1 break 语句应仅出现在开关体或循环体中或作为开关体或循环体出现。

语义

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

引用自 ISO/IEC 9899:TC3

所以你的 break 应该可以工作,因为你不使用任何 pre alpha 编译器。

但问题更多

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

所以你不会爆发,因为你从不调用break;

于 2013-09-26T10:18:04.377 回答
0

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

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

于 2013-09-26T10:15:22.453 回答
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.
    }
}
于 2013-09-26T10:23:34.310 回答
0

这一切都基于您何时想从内部循环中跳出的逻辑。考虑以下步骤。

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

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

如果你愿意,你可以通过使用 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:
于 2013-09-26T10:16:15.690 回答
0

Break 只会中断使用它的循环,顺便说一句,如果该条件为假,它将永远不会执行

于 2013-09-26T10:16:55.473 回答
0

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

于 2013-09-26T10:17:59.273 回答