本帖最后由 超过光速c 于 2021-8-27 09:48 编辑
你的第9行,里面多了一个2, printf("1k以内的素数有:\n2\n");
你的整体代码是没问题的,但是为什么无法打印完所有素数,
在每次对素数的判断循环后,你没有对 flag 进行重制,flag的值一旦被 赋值为 0 了,就一直是0。
所以,建议在第25行,也就是内for循环的每次素数判断循环完成后,对flag进行重制,重制为 1,即 flag = 1;
关于你使用。_Bool flag; 定义布尔类型什么会报错,我认为应该跟你的编辑器的编译器有关。我使用的是 vsCode 使用的 C/C++ v1.6.0 是能正常进行布尔类型定义的。
对你的代码进行修改后:
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int j, i;
- _Bool flag;
- printf("1k以内的素数有:\n"); // 修改位置1
- for (i=2;i <= 1000;i++)
- {
- for (j = 2;j <= i/2;j++)
- {
- if (i % j == 0)
- {
- flag = 0;
- break;
- }
- }
- if (flag)
- {
- printf("%d\n", i);
- }
- flag = 1; // 修改位置2
- }
- return 0;
- }
复制代码