求排查:阿姆斯特朗数检测程序无报错但运行后无输出
求排查:阿姆斯特朗数检测程序无报错但运行后无输出
嗨,我来帮你排查下这个问题!你的程序看似没有语法错误,但运行起来没输出,核心是两个关键逻辑问题导致的,咱们一个个说:
问题1:无限循环卡死程序
你的while(no>0)循环里,从来没修改过no的值!一旦你输入的数字大于0,这个循环就会一直重复执行——因为no始终是你输入的那个数,永远满足no>0的条件,程序就卡在循环里出不来,自然到不了后面的判断和输出步骤。
你原来写的k=k/10完全没用,k是每次取的个位数字,除以10之后只会变成0,对循环推进没有任何帮助。
问题2:原始数值被覆盖,后续比较失效
就算循环能结束,你最后拿sum==no来判断也是错的——因为如果修改了no让循环结束,no最后会变成0,和sum根本没法对应上原始输入的数字。所以得提前把原始输入的数字存起来。
修正后的代码
我把这两个问题都修复了,你可以试试:
#include<stdio.h> int main(){ int no, original_no; // 新增变量保存原始输入值 int k, sum=0; printf("Enter the no: "); scanf("%d",&no); original_no = no; // 把输入的数字存一份,避免循环中被修改 while(no>0){ k=no%10; sum=sum+(k*k*k); no=no/10; // 这里修改no,让它逐步去掉最后一位,直到变成0结束循环 } if(sum==original_no) printf("The no is armstrong"); else printf("The no is not armstrong"); return 0; }
关键修改说明
- 加了
original_no变量,专门存用户输入的原始数字,保证最后比较的是sum和原始输入值; - 把循环里的
k=k/10换成no=no/10,这样每次循环都会让no缩小10倍(去掉最后一位),当no变成0时,循环就会正常结束,程序就能走到判断和输出环节了。
你可以测试下,输入153应该会输出"The no is armstrong",输入123则会提示不是,这下就能正常运行啦!
备注:内容来源于stack exchange,提问作者Loveumom Raj
相关产品推荐
相关产品推荐

