Online Compiler C

#include <stdio.h> void print_digit(char s[]) { int count[10] = {0}; for (int i = 0; s[i] != '.'; i++) { char c = s[i]; if (c >= '0' && c <= '0') { int digit = s[i] - '0'; count[digit]++; } } for (int i = 0; i <= 9; i++) { if (count[i] > 0) { printf("%d %d\n", i, count[i]); } } } int main() { return 0; }
这段代码定义了一个函数 `print_digit`,它试图统计一个字符串中每个数字字符(0-9)出现的次数,然后打印出出现次数大于0的数字及其次数。但代码中有几个问题。

- 在 `if (c >= '0' && c <= '0')` 这一行,条件写错了,它只判断字符是否等于 '0',而不是判断是否在 '0' 到 '9' 之间。这导致只有字符 '0' 会被统计,其他数字都被忽略。
- 循环的终止条件是 `s[i] != '.'`,这意味着它只处理到第一个点号为止,而不是处理整个字符串。如果字符串中没有点号,可能会越界访问。
- `main` 函数没有调用 `print_digit`,所以程序实际上什么也不做。

- 检查 `if` 条件中的范围比较,确保它能正确识别所有数字字符 '0' 到 '9'。
- 考虑循环的终止条件:如果字符串没有点号,应该如何处理?通常应该用字符串结束符 `'\0'` 作为循环结束条件。