我如何打印序列的范围,除了c中的while循环

时间:2018-02-12 14:15:31

标签: c while-loop

我想在没有998的情况下打印1-1000。此代码打印最多997然后停止。这段代码有什么问题?

#include<stdio.h>
int main() { 
    int n =1;
    while(1){   
        if(n==998){
            continue;
        }
        printf("%d\n",n);
        n++;
        if(n>1000){
            break;
        }   
    }
    return 0;
}

4 个答案:

答案 0 :(得分:3)

原因是,一旦我们到达n

,我们就永远不会增加998

一种解决方案是将n++;移到if (n == 998) continue;之上,反之亦然,即:

#include <stdio.h>
int main()
{
    int n = 0;
    while (1) {

        n++;
        if (n == 998)
            continue;
        if (n > 1000)
            break;

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

    }
    return 0;
}

答案 1 :(得分:2)

问题在于您的情况:

if(n==998){
  continue;
}

它不会增加变量“n”。

解决此问题的一种方法是使用以下代码:

if(n==998){
  n++;
  continue;
}

答案 2 :(得分:2)

您的解决方案停留在998,因为您始终执行继续进入下一次迭代而不增加您的值。这是一个更简单,更紧凑的形式:

#include <stdio.h>
int main() { 

    for (int i = 1; i <= 1000; i++) {
        if (i == 998) {
            continue;
        }
        printf("%d\n", i);
    }

    return 0;
}

答案 3 :(得分:1)

一旦n为998,您将跳转到循环的下一次迭代,而不会递增n。这会导致无限循环,无法输出任何内容。

而不是在continue为998时使用n,而是如果 998则可以打印:

#include<stdio.h>

int main() { 
  int n =1;
  while(1){ 
    if(n!=998){
      printf("%d\n",n);
    }

    n++;
    if(n>1000){
       break;
    }
  }
  return 0;
}

使用for循环而不是带有退出条件的无限while循环可以进一步简化这一点:

#include<stdio.h>

int main() { 
  int n;
  for (n=1; n<=1000; n++) {
    if(n!=998){
      printf("%d\n",n);
    }
  }
  return 0;
}