为什么C语言区间素数打印程序未输出所有区间内的素数?
素数打印程序异常输出原因分析
核心错误点
main函数中的return 0语句被错误放置在for循环内部,属于循环体的一部分。
触发逻辑
当输入区间为12到30时,循环第一次遍历的数值为13,经素数判定函数验证为素数,打印13后,程序会立即执行return 0终止整个主函数,循环不会继续遍历14到29的剩余区间数值,因此仅输出第一个符合条件的素数13,不会打印后续区间内的其他素数。
修复方案
将return 0语句移动到for循环结束后的位置,也就是main函数的末尾即可,修复后的核心代码段如下:
int main() { // declar varabiels int n1,n2,a,Tayp; // input from user printf("Enter to integer values: "); scanf("%d\n%d",&n1,&n2); printf("Prime numbers between %d and %d are: ", n1, n2); // condition statment for (a= n1 + 1;a < n2; ++a ) { Tayp = checkprimenumbers(a); if (Tayp == 1) printf("%d ", a) ; } // return 0 移到循环外部 return 0; }
额外优化提示
scanf("%d\n%d",&n1,&n2);中的\n属于多余写法,用户输入时需要多输入一次换行才能正常读取第二个整数,可修改为scanf("%d %d",&n1,&n2);适配更通用的输入场景。
内容的提问来源于stack exchange,提问作者youssef abd elhakem
相关产品推荐
相关产品推荐

