如何正确重新初始化C中的循环变量?

时间:2019-10-15 18:41:45

标签: c loops nested-loops

我想知道代码中的错误逻辑在哪里,我怀疑这是我的循环无法在打印质数之前完全运行的原因,但我似乎无法解决它。我曾尝试每次将变量fcount重新初始化为0,但是结果“素数”不正确。我对该程序的目标是让用户输入数字N可以从1循环到N,并在其间打印所有素数。如果有人可以帮助指出我的逻辑错误以及任何可能的解决方案,我将非常感激。

#include <stdio.h>

int main(void) {
    int i,j,n, fcount = 0;
    printf("Enter number n:\n");
    scanf("%d",&n);
    printf("prime numbers are:\n");
    for (i=1; i < n; i++)
        {
          for (j = i; j > 0; j--)
              {

                if (i%j == 0)
                    {
                      fcount++;     
                      // at some point every number will have fcount =2
                      fcount = 0;
                    }

              }

        }

         if (fcount == 2)
            {
                printf("%d\n",i);
            } 
            return 0;
}

1 个答案:

答案 0 :(得分:2)

这不是测试素数的非常有效的方法,但是该方法有效。但是,您有两个错误:

  • 对于每个ifcount必须从0开始,因此fcount = 0应该是该循环中的第一件事。
  • 您必须为每个fcount == 2测试i,而不仅仅是在最后一次测试,因此请将测试移到i的循环中。

关于您的代码的一些观察结果:

  • 如果您正确地格式化了代码,这些错误可能会更容易发现:Plese习惯于在大括号中缩进每个块,以便使代码的结构清晰。
  • 最好在需要的地方声明变量。这意味着fcount可以位于i上的循环本地。循环变量ij可以直接在循环头中声明。

将所有这些放在一起:

#include <stdio.h>

int main(void)
{
    int n;

    printf("Enter number n:\n");
    scanf("%d",&n);
    // Should test for input errors ...

    printf("prime numbers are:\n");

    for (int i = 1; i < n; i++) {
        int fcount = 0;

        for (int j = i; j > 0; j--) {
            if (i % j == 0) {
                fcount++;
            }
        }

        if (fcount == 2) {
            printf("%d\n", i);
        }
    }

    return 0;
}