for (int i = 0; i<10; i++)
{
//do some validation for record length
//if it is not valid
continue; // goes to the next iteration in for loop for 'i'
for (int j = 0; j<5; j+=2)
{
//do some more validation for individual record
//if it is not valid
如果我使用i
,它应转到下一个continue
。这将转到下一个j
谁能告诉我怎么做?
答案 0 :(得分:2)
在break;
循环中使用j
将完全退出j
循环。
但至少要花几分钟的时间来决定是否有替代的算法,方法或终止条件可以消除在循环中断的需要。
答案 1 :(得分:2)
如果内循环之后有东西,你需要专门测试外循环中的标志:
for(some_outer_vars){
bool should_skip = false;
// ...
for(some_inner_vars){
// ...
if(your_condition){
should_skip = true;
break;
}
}
if(should_skip)
continue;
// ...
}
答案 2 :(得分:1)
内循环后你有什么东西吗?如果没有,您可以使用break
:
for (i = 0; i < 10; i++)
{
if (i is no good)
continue;
for (j = 0; j < 5; j++)
{
if (j is no good)
break;
}
}
如果您确实需要稍后执行某些操作,可以将break
与其他标记结合使用。
答案 3 :(得分:0)
改为放置break;
。这应该让你脱离内循环。
答案 4 :(得分:0)
for(int i = o; i&lt; 10; i ++) {
}
for(int j = 0; j <5; j + = 2) { 打破; }
“打破;”将结束当前的j循环并转到下一个i。
答案 5 :(得分:0)
如果您无法排列逻辑,以便内循环中的break
直接继续外循环,那么执行以下操作:
for (int i = 0; i<10; i++)
{
if (!valid(i)) continue;
for (int j = 0; j<5; j+=2)
{
if (!valid(i,j)) goto continue_i;
do_whatever_with_i_and_j()
}
more_stuff_here();
continue_i:
}
在那里,我已经说过了。代码比设置标志的版本更短,更简单,更易于阅读和分析,然后中断,然后立即再次检查标志并有条件地继续。
另一种选择是
void inner_loop(int i) {
if (!valid(i)) return;
for (int j = 0; j<5; j+=2)
{
if (!valid(i,j)) return;
do_whatever_with_i_and_j()
}
more_stuff_here();
}
for (int i = 0; i<10; i++)
{
inner_loop(i);
}
根据内部循环的作用,您可能会发现自己构建了一种机制,可以让它访问它应该修改的内容。
社区维基,因为这个(或类似的情况)在SO上被多次论证,实际上定义了“主观和议论”。
答案 6 :(得分:0)
我尝试避免中断并在处理循环时继续,因为如果您以后必须重新构建代码,它们很容易被遗漏并且它们的含义会发生变化。你可以使用j = 5;当你需要退出内循环。如果添加第三个循环或开关,则该行的含义不会改变。有时你需要在你的循环中添加if语句来测试i和j,或者甚至是像bool iIsInvalid这样的新变量,但我认为这样可以更容易阅读控制流。