You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算非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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:25:25