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; }
代码说明
- 数组初始化:
int dat[10] = {0};确保所有计数初始为0,避免随机垃圾值干扰统计结果。 - 特殊情况处理:输入为0时,循环不会执行,所以单独给0的计数加1。
- 数字提取逻辑:通过
num%10获取最后一位数字,num/10去掉最后一位,循环直到num变为0,覆盖输入数字的每一位。 - 结果输出:用
for循环遍历0-9,逐个输出每个数字的出现次数。
内容的提问来源于stack exchange,提问作者dannyph
相关产品推荐
相关产品推荐

