在嵌套for循环中继续语句

时间:2014-11-20 15:58:23

标签: c for-loop nested-loops continue

我不明白这个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。

5 个答案:

答案 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解释了继续声明