我这里有代码,
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循环。
对此有何解决方案?
答案 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: