C语言开发时无法将计算得到的质数存入数组问题求助
问题原因
- 数组类型错误:使用
char类型数组存储整数型质数,char取值范围有限,大于127的数值会发生溢出截断,无法正确存储质数,需改为int类型数组。 - 输出方式错误:使用
%s格式符输出整数数组,%s仅用于输出以\0结尾的字符串,直接打印整数数组会输出乱码甚至触发内存越界,需遍历数组逐个输出元素。 - 函数未前置声明:自定义的
primed函数定义在main函数之后,调用前没有声明原型,编译器会触发隐式声明报错。 - 输入参数未使用:代码读取了
m参数但完全没有用到,无法实现「指定数值范围」的质数筛选逻辑,需要调整循环范围匹配输入的区间。 - 缺少数组越界防护:未判断收集的质数数量是否超过数组长度
SIZE,数值范围过大时会发生数组越界。
修正后代码
#include <stdio.h> #define SIZE 1000 // 提前声明质数判断函数 int primed(int num); int main(){ int n, m, count, i=0; // 改为int类型数组存储质数 int prime[SIZE]; printf("请输入数值范围的左右边界(空格分隔):"); scanf("%d %d", &n, &m); // 适配任意输入顺序,从较小值遍历到较大值 int start = n < m ? n : m; int end = n > m ? n : m; for(count = start; count <= end; count++){ // 小于2的数不是质数,直接跳过 if(count < 2) continue; // 增加数组越界判断 if(i >= SIZE) { printf("质数数量超过数组上限,仅存储前%d个质数\n", SIZE); break; } if(primed(count) == 0){ prime[i++] = count; } } // 遍历输出数组中存储的质数 printf("范围内的质数共%d个:\n", i); for(int j=0; j<i; j++){ printf("%d ", prime[j]); } printf("\n"); return 0; } int primed(int num){ // 优化判断逻辑,遍历到平方根即可,运行效率更高 for(int primes = 2; primes*primes <= num; primes++){ if (num % primes == 0){ return 1; } } return 0; }
内容的提问来源于stack exchange,提问作者user17067764
相关产品推荐
相关产品推荐

