Online Compiler C

#include <stdio.h> int digit_to_num(char c) { int digit; if (c >= '0' && c <= '9') { digit = c - '0'; } return digit; } int main(void) { int c; while ((c = getchar()) != '.') { printf("%d", digit_to_num(c)); } return 0; }
这段代码的功能是:从输入中逐个读取字符,遇到小数点 '.' 时停止,并将每个数字字符转换为对应的整数后输出。例如输入 "123." 会输出 "123"。

代码存在一个逻辑问题:当输入字符不是数字时(比如字母或符号),函数 `digit_to_num` 会返回一个未初始化的值,导致输出不可预测。

- 在 `digit_to_num` 函数中,如果字符不是数字,变量 `digit` 没有被赋值就直接返回,这会导致未定义行为。需要确保所有路径都有返回值。
- 主循环中,`getchar()` 返回的是 `int` 类型,但函数 `digit_to_num` 只处理了数字字符,其他字符(如换行符、空格)也会被传入函数,可能产生意外输出。