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

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

首先,`main` 函数只读取了一个字符 `t`,而不是一个字符串。`print_digit_count` 函数期望接收一个字符数组(字符串),但实际传入的只是一个字符。这会导致函数内部对数组的遍历行为异常。

其次,`while` 循环的条件 `(number[i]-'0')>=0 && (number[i]-'0')<=9` 是正确的,但循环内部没有更新 `i` 的值,因此会陷入无限循环。另外,内部 `if` 判断中写的是 `(number[i]-'9')`,应该是 `(number[i]-'0')` 才对,这里减去了字符 '9' 而不是 '0',导致逻辑错误。

- 检查 `main` 函数:如何让程序读入一个完整的数字字符串,而不是单个字符?考虑使用 `scanf` 的 `%s` 格式或 `fgets`。
- 检查 `while` 循环:循环变量 `i` 需要在每次迭代后递增,否则循环永远不会结束。同时修正 `if` 条件中的减法运算。