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

C语言实现数字中0-9出现次数统计的代码问题求助

问题分析与修正

你的代码存在多个核心问题,导致程序卡死或逻辑完全错误:

  • 计数数组长度错误:0-9共10个数字,dat[9]只能容纳9个元素,且未初始化的数组会包含随机垃圾值,必须初始化为0。
  • 数字提取逻辑完全偏离需求:原代码通过num%10取余后循环递减余数,这和提取输入数字的每一位毫无关系。正确做法是循环提取当前数字的最后一位,再将数字除以10,直到数字变为0。
  • 死循环导致程序卡死:嵌套的while(dig >=0)没有改变dig的值,会无限执行,永远到不了最后的printf语句。
  • 条件判断语法错误:else if(mod =1)是赋值操作,不是相等判断,应该用==。
  • 结果输出不完整:最后只输出单个数字的计数,需要遍历0-9输出所有数字的出现次数。

修正后的代码

#include <stdio.h>

int main()
{
    int num, dig;
    // 初始化计数数组为0,长度10对应0-9十个数字
    int dat[10] = {0};

    printf("Give a number: ");
    scanf("%d", &num);

    // 单独处理输入为0的特殊情况
    if (num == 0) {
        dat[0]++;
    }

    // 循环提取每一位数字并计数
    while (num != 0) {
        dig = num % 10; // 取当前数字的最后一位
        dat[dig]++;     // 对应数字的计数加1
        num = num / 10; // 去掉最后一位数字
    }

    // 遍历输出所有数字的出现次数
    for (int i = 0; i < 10; i++) {
        printf("%d appears %d times\n", i, dat[i]);
    }

    return 0;
}

代码说明

  1. 数组初始化:int dat[10] = {0};确保所有计数初始为0,避免随机垃圾值干扰统计结果。
  2. 特殊情况处理:输入为0时,循环不会执行,所以单独给0的计数加1。
  3. 数字提取逻辑:通过num%10获取最后一位数字,num/10去掉最后一位,循环直到num变为0,覆盖输入数字的每一位。
  4. 结果输出:用for循环遍历0-9,逐个输出每个数字的出现次数。

内容的提问来源于stack exchange,提问作者dannyph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:15:41