首页 > 解决方案 > C中的嵌套for循环

问题描述

我正在尝试使用以下代码打印素数:

#include <stdio.h>
int prime_check(int number);

int main(){
    int x;
    printf("Number of choice\n");
    scanf("%d",&x);
    prime_check(x);
    return 0;
}

int prime_check(int number){
    int count = number;
    for (number>=0; count>=0; --number ){
        for (number>=0; count>=0; --count){
                if (number % count !=0){
                    printf("# %d\n ",&number);
                }
        }
    }

return number;
}

以下是无论输入我得到的输出:# 6422272

作为一名自学者,我希望能够获得任何您认为适合上述问题以及我在 C 中所走的道路的相关指导。

先感谢您

标签: cloopsfor-loopprimesfunction-definition

解决方案


您的代码中存在许多问题,但对您看到的数字最直接负责的是这一行:

printf("# %d\n ",&number);

通过将 & 放在number您要求计算机打印存储变量的内存地址之前number,而不是该变量的实际值。

到目前为止,您似乎每次运行程序时,都会在同一地址创建此变量,这就是您在输出中看到的内容。

请记住 -与它printf相反的是scanf它需要值而不是地址(除非您尝试打印一个字符串,也就是以空字符结尾的字符数组)。

你的第二个问题是你如何使用for循环。

for (initialization; condition; change)

您将条件>=放在初始化部分中,应在其中分配初始值。
如果您不想分配任何初始值,可以将该部分留空并放置分号;直接在括号 (.

然后,在更改部分,您减少一个与您在条件部分测试的变量不同的变量,因此您的循环可能永远不会结束。

for (number>=0; count>=0; --number )

你测试count但你递减number,所以count可能永远不会改变,你的程序将永远运行。

此外,您通过将其用作循环索引来丢失传递给函数的原始数字的值,但也许这就是您想要的?

这给我们带来了代码中最大的问题:
它不检查素数。

您的所有代码都试图做的是打印一堆余数(模数),然后返回一些将被忽略的值。

如果您想实际检查一个数字是否为素数,请先写出您作为人类将采取哪些步骤在纸上手动检查它。

一旦你有了这个伪代码,你应该能够创建正确的 C 代码。


推荐阅读