C语言查找区间素数时flag变量为什么需要在循环内初始化?
C语言区间素数查找程序flag变量异常问题原因分析
核心原因
flag变量未在每次判断新数字前重置,导致之前的判断结果污染后续逻辑:
- 你当前的代码仅在程序开头将flag初始化为0,这个标记的作用是标识当前正在判断的数是否为合数:如果找到能整除该数的因子,就将flag设为1。
- 只要程序运行过程中遇到第一个合数,flag就会被永久赋值为1,之后判断后续所有数字时,flag都不会回到初始的0状态,导致后续所有数字都会被误判为合数,不会被输出。
修复方案
每次外层循环开始判断新的数字之前,先将flag重置为0即可,修正后的外层循环代码如下:
for(i=lower;i<=upper;i=i+1) { flag = 0; // 每次判断新数字前重置标记位 for(j=2;j<=i/2;j++) { if((i%j)==0) { flag=1; break; } } if(flag==0){ printf("%d ",i); } }
内容的提问来源于stack exchange,提问作者tryingtolearn
相关产品推荐
相关产品推荐

