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

How do I correctly reinitialize a loop variable in C?

我想知道我的代码中的错误逻辑在哪里,我怀疑它在于我的循环失败 运行 在打印质数之前完全通过,但我似乎无法修复它。我每次都尝试将变量 fcount 重新初始化为 0,但结果 "prime numbers" 不正确。我的程序目标是让用户输入数字 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;
}

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

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

对您的代码的一些观察:

  • 如果您正确格式化代码,这些错误可能会更容易被发现:请养成缩进花括号中每个块的习惯,以便代码的结构变得清晰。
  • 最好在需要的地方声明变量。这意味着 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;
}