在线编译器 C

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

首先,代码中有一个孤立的 `return 0;` 出现在函数外部,这会导致编译错误。`return 0;` 应该放在 `main` 函数内部,但这里并没有定义 `main` 函数。

其次,在循环条件 `number[i] != '0'` 中,你使用了字符 `'0'` 作为终止条件,这会让循环在遇到数字字符 `'0'` 时停止,而不是在字符串结尾 `'\0'` 时停止。这会导致统计不完整。

另外,计算数字时 `number[i] - '\0'` 是错误的。`'\0'` 是空字符,ASCII 码为 0,这样减得到的是字符本身的 ASCII 码,而不是数字值。应该用 `number[i] - '0'` 来将字符转换为对应的整数。

- 检查循环终止条件:字符串的结尾是 `'\0'`(空字符),不是 `'0'`(数字零)。思考如何正确判断字符串结束。
- 检查字符转数字的减法:要得到数字字符对应的整数值,应该减去字符 `'0'`,而不是 `'\0'`。