如何正确地重新初始化 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;
}
这不是一种非常有效的素数测试方法,但该方法有效。但是,您有两个错误:
- 对于每个
i
,fcount
必须从 0 开始,因此 fcount = 0
应该是该循环中的第一件事。
- 您必须为每个
i
测试 fcount == 2
,而不仅仅是最后一次,因此将该测试移至 i
的循环中。
对您的代码的一些观察:
- 如果您正确格式化代码,这些错误可能会更容易被发现:请养成缩进花括号中每个块的习惯,以便代码的结构变得清晰。
- 最好在需要的地方声明变量。这意味着
fcount
可以局部于 i
上的循环。循环变量i
和j
可以直接在循环头中声明。
将所有这些放在一起:
#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;
}
我想知道我的代码中的错误逻辑在哪里,我怀疑它在于我的循环失败 运行 在打印质数之前完全通过,但我似乎无法修复它。我每次都尝试将变量 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;
}
这不是一种非常有效的素数测试方法,但该方法有效。但是,您有两个错误:
- 对于每个
i
,fcount
必须从 0 开始,因此fcount = 0
应该是该循环中的第一件事。 - 您必须为每个
i
测试fcount == 2
,而不仅仅是最后一次,因此将该测试移至i
的循环中。
对您的代码的一些观察:
- 如果您正确格式化代码,这些错误可能会更容易被发现:请养成缩进花括号中每个块的习惯,以便代码的结构变得清晰。
- 最好在需要的地方声明变量。这意味着
fcount
可以局部于i
上的循环。循环变量i
和j
可以直接在循环头中声明。
将所有这些放在一起:
#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;
}