Онлайн компилятор C

#include <stdio.h> void print_digit_count(char number[]){ int a[10]={0}; int i=0; while((a[i]-'0')>=0&&(a[i]-'0')<=9){ for(int m=0;m<10;m++){ if(m==(a[i]-'9')){ a[m]++; } } } for(int i=0;i<10;i++){ printf("%d %d",i,a[i]); } } int main() { int t; scanf("%d",&t); print_digit_count(t); return 0; }
这段代码的目的是统计一个整数中各个数字(0-9)出现的次数,但存在几个关键问题。

首先,函数 `print_digit_count` 的参数类型是 `char number[]`,但在 `main` 中传入的是 `int t`,类型不匹配。同时,函数内部的逻辑完全错误:它试图用 `a[i]-'0'` 来获取数字,但 `a` 是计数数组,初始全为0,所以 `a[i]-'0'` 永远是负数,循环条件永远不会成立,也不会进入循环。

- 检查函数参数:你需要传入一个字符串(字符数组)来表示数字,而不是一个整数。思考如何将整数转换为字符串,或者直接修改函数以接受整数参数。
- 重新设计循环逻辑:当前循环条件 `(a[i]-'0')>=0` 没有意义。你需要遍历输入的数字的每一位,而不是遍历计数数组。考虑如何逐位提取数字的每一位(例如通过取模和除法)。