在do while循环中跳过给定值时进行c次迭代

时间:2014-01-09 20:48:22

标签: c

我在C中有一个非常简单的问题。我正在尝试编写一个简单的程序,在1010之间输出100的倍数(即:在封闭的时间间隔内) [10,100]}跳过3070并垂直输出值。

这是我的代码:

#include<stdio.h>
main()
{
  int i=10;
  do {
    if(i==30||i==70)
      continue; 

    printf("\n %d",i);
    i++;
  } while(i<100);

  return 0;
}

程序在29跳过30时停止并继续进入永无止境的循环。有什么问题?

7 个答案:

答案 0 :(得分:3)

问题在于,当您点击if语句时,您现在正在跳过i的增量。所以你永远不会达到100!

#include<stdio.h>
main()
{
  int i=10;
  do {
    if(i==30||i==70)
      continue;        //!!!! This will skip the i increment

    printf("\n %d",i);
    i++;
  } while(i<100);

  return 0;
}

我建议使用for循环:

main()
{
  for (i = 10; i < 100; i++) {
    if(i==30||i==70)
      continue;          // The for loop will do the i++ on the "continue"

    printf("\n %d",i);
  } 

  return 0;
}

答案 1 :(得分:2)

mbratch正确地指出了你的问题,但你可能想要考虑这种事情的for循环。它会阻止这个特殊问题,因为增量是自动的。

我不会为你做整件事,因为你显然是想学习,但这应该让你开始:

for (i=0; i<100; i+= 1)

你必须更改该行中的一些数字,但希望你能理解它们在更改时的含义。

答案 2 :(得分:1)

i达到30时,continue语句将返回循环的开头。

因此,循环会无休止地继续,因为i不会从此点开始增加。

答案 3 :(得分:1)

你的代码正在完成它的编写工作。 continue跳过增量指令,因此值达到30并卡在那里。将增量移动到循环体的开头,或者更好的是,使用for而不是while

答案 4 :(得分:0)

它永远循环,因为你continue但不增加i。

if(i==30||i==70) {
  i++;
  continue;   
}

或者您可以像这样使用for循环,

#include<stdio.h>
int main()
{ 
  int i=10;

  for (; i < 100; i++)
  {
    if(i==30 || i==70) {
      continue;
    }
    printf("\n %d",i);
  }

  return 0;
}

答案 5 :(得分:0)

原因是i在do..while的主体内部之后永远不会增加。你需要增加它。

if (i == 30 || i == 70){
    i++;
    continue;
}

答案 6 :(得分:0)

请勿使用continue。而是只要!=3070打印出值。同时按10而不是1进行迭代,以输出倍数10

#include<stdio.h>
main()
{
    int i = 10;

    do
    {
        if (i != 30 && i != 70)
            printf("\n %d", i);

        i += 10;

    }
    while (i <= 100); // if you want to print 100

    return 0;
}

输出:

 10
 20
 40
 50
 60
 80
 90
100

如果您还需要打印while (i <= 100);,请使用100