用C语言查找指定范围内素数时代码无输出,无法定位逻辑错误求助
代码逻辑错误定位
- 无输出的核心触发点:素数判断的循环从
i=2启动,第一次迭代就会命中i%2 ==0的判断条件,立刻将flag赋值为1并跳出循环,后续的打印分支if (flag == 0)永远不会被执行。 - 输入逻辑和提示不匹配:提示要求输入时用逗号分隔上下限,但
scanf("%d %d", &lowerLevel, &upperLevel)的格式串没有匹配逗号的逻辑,实际仅支持读取空格分隔的整数,会误导用户输入。 - 未匹配指定区间要求:遍历过程直接从2开始,完全没有使用用户输入的
lowerLevel作为遍历起点,无法实现指定区间的素数查找。 - 冗余变量无实际作用:定义的
prime变量全程未参与任何运算或判断。 - 未定义行为风险:
i变量定义时未做初始化,如果输入的upperLevel小于2导致外层遍历循环完全不执行,后续打印时会输出栈上的随机内存值。 - 素数校验流程缺失:当前代码仅错误判断了遍历过程中是否存在偶数,没有对区间内每个数字逐一完成素数的核心校验流程,判断逻辑完全不符合素数定义。
可运行的参考实现
#include <stdio.h> int main() { int lowerLevel, upperLevel; printf("输入查找区间的下限和上限(空格分隔):"); scanf("%d %d", &lowerLevel, &upperLevel); // 兼容上下限颠倒的输入场景 if (lowerLevel > upperLevel) { int temp = lowerLevel; lowerLevel = upperLevel; upperLevel = temp; } printf("区间内的素数有:"); for (int num = lowerLevel; num <= upperLevel; num++) { int isPrime = 1; // 小于2的数字不属于素数 if (num < 2) continue; // 遍历可能的因数完成素数校验 for (int div = 2; div * div <= num; div++) { if (num % div == 0) { isPrime = 0; break; } } if (isPrime) { printf("%d ", num); } } return 0; }
内容的提问来源于stack exchange,提问作者Zinzin
相关产品推荐
相关产品推荐

