计算非0数字乘积的C语言程序遇含0输入时死循环求助
问题排查与修复
死循环原因
你的代码在遇到数字位为0时,仅执行了b=b*1,但没有修改变量a的值。此时while(a>0)的条件始终成立,程序会一直停留在当前循环,陷入死循环。
修正后的代码
#include <stdio.h> #include <stdlib.h> int main() { int a,b,c; b=1; a=0; scanf("%d", &a); while (a>0) { c=a%10; if (c!=0) { // 仅非0位参与乘积计算 b=b*c; } a=a/10; // 无论当前位是否为0,都移除最后一位推进循环 } printf("Proizvedenie: %d\n", b); return 0; }
修正说明
把a=a/10移到if-else结构外,确保每轮循环都会将a除以10,去掉已经处理过的最后一位数字。这样无论当前位是0还是非0,循环都能正常推进直到a变为0,结束循环。
测试验证
- 输入
12304:依次处理4、0、3、2、1,非0位乘积为432*1=24,程序正常输出结果 - 输入
12340:依次处理0、4、3、2、1,非0位乘积为432*1=24,程序正常输出结果
内容的提问来源于stack exchange,提问作者kek4a
相关产品推荐
相关产品推荐

