我不明白这个for循环中的continue语句究竟是做什么的。如果删除它,代码有何不同?如果将它放在for循环的末尾,它会跳过哪一行?
int sum = 0, i, j, stop = 0;
for( i = 1; i <= 5 && !stop; i++)
{
for( j = 1; j <= 5 ; j++)
{
if (j%4 == 0)
{
stop = 1;
continue;
}
sum += i+j;
}
}
printf("%d\n", sum);
如果你运行这个程序,总和将是15,如果你注释掉countinue行,那么它将会是20。
答案 0 :(得分:3)
如果要格式化代码,那就更清楚了。让我们考虑内循环
for( j = 1; j <= 5 ; j++)
{
if ( j % 4 == 0)
{
stop = 1;
continue;
}
sum += i+j;
}
因此,当您看到j%4 == 0然后声明
sum += i+j;
被跳过。
至于整个代码那么它没有任何意义。:)这是一个愚蠢的代码。
实际上您的代码等同于以下
int sum = 0, j;
for( j = 1; j <= 5 ; j++ )
{
if ( j != 4 ) sum += j + 1
}
printf("%d\n", sum);
所以你得到的总和2 + 3 + 4 + 6等于15。:)
答案 1 :(得分:0)
continue
语句用于启动循环的下一次迭代,在continue
之后跳过循环中的所有内容。在您的情况下,一旦程序的执行到达continue
语句,则内循环的下一次迭代开始,跳过continue
之后的任何内容。它会跳过sum += i+j;
之后的continue
,当j
为4时将不会添加总和,因为j%4
将为0.这就是为什么当你获得20时在取消注释时评论continue
和15。
P.S:您的外部循环只会执行一次,因为stop
将在内循环的if
内更改。
答案 2 :(得分:0)
continue语句跳过当前循环的剩余部分。在嵌套循环的情况下,它会跳到最里面循环的下一次迭代。
在这种情况下,如果你没有继续,你会在每次迭代中执行sum += i+j;
,有时你只想要它。
话虽如此,这是一个非常尴尬的循环。无论如何,整个stop
变量都是从一开始就构思出来的。
答案 3 :(得分:0)
continue
导致封闭的for
循环开始下一次迭代。作为一个更基本的示例,请使用以下代码:
for(int i = 0; i < 50; i++)
{
if(i % 2 == 1) // If it's odd
continue;
printf("%d\n", i);
}
在这种情况下,如果continue
为奇数,for
语句将导致i
循环立即开始下一次迭代,因此此代码将打印0到50之间的偶数
答案 4 :(得分:0)
int sum = 0, i, j, stop = 0;
for( i = 1; i <= 5 && !stop; i++)
{
for( j = 1; j <= 5 ; j++)
{
if (j%4 == 0) <===== is j divisible by 4 ?
{
stop = 1; <=== set stop flag, will continue for J loop
but stop next I loop and end the routine
continue; <==== skip the rest of the J loop for this itteration
}
sum += i+j;
}
}
printf("%d\n", sum);
http://msdn.microsoft.com/en-us/library/0ceyyskb.aspx解释了继续声明