c - 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 中所走的道路的相关指导。
先感谢您
解决方案
您的代码中存在许多问题,但对您看到的数字最直接负责的是这一行:
printf("# %d\n ",&number);
通过将 & 放在number
您要求计算机打印存储变量的内存地址之前number
,而不是该变量的实际值。
到目前为止,您似乎每次运行程序时,都会在同一地址创建此变量,这就是您在输出中看到的内容。
请记住 -与它printf
相反的是scanf
它需要值而不是地址(除非您尝试打印一个字符串,也就是以空字符结尾的字符数组)。
你的第二个问题是你如何使用for
循环。
for (initialization; condition; change)
您将条件>=
放在初始化部分中,应在其中分配初始值。
如果您不想分配任何初始值,可以将该部分留空并放置分号;直接在括号 (.
然后,在更改部分,您减少一个与您在条件部分测试的变量不同的变量,因此您的循环可能永远不会结束。
for (number>=0; count>=0; --number )
你测试count
但你递减number
,所以count
可能永远不会改变,你的程序将永远运行。
此外,您通过将其用作循环索引来丢失传递给函数的原始数字的值,但也许这就是您想要的?
这给我们带来了代码中最大的问题:
它不检查素数。
您的所有代码都试图做的是打印一堆余数(模数),然后返回一些将被忽略的值。
如果您想实际检查一个数字是否为素数,请先写出您作为人类将采取哪些步骤在纸上手动检查它。
一旦你有了这个伪代码,你应该能够创建正确的 C 代码。
推荐阅读
- mysql - 选择最大本机查询休眠
- docker - 如何使用 Jenkins 声明式管道运行特权 Docker 容器
- reactjs - 如何在 React 中使用带有数字输入的占位符?
- javascript - Lodash 将查找对象嵌套到数组
- corda - 在 Corda 中,如果我的 RPC 客户端断开连接,如何获取流状态?
- kubernetes - Traefik & Keycloak:错误 SSL_ERROR_RX_RECORD_TOO_LONG
- html - 使用 :hover 效果改变块的高度。如何让它不“推”下块?
- java - java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.io.InputStream.read(byte[])”
- javascript - 如何在 React Native 中获取对象数组中的对象
- flutter - Flutter中的表格对齐?