Online Compiler C

#include <stdio.h> int digit_to_num(char c) { int sum = 0, digit; if (c >= '0' && c <= '9') { digit = c - '0'; sum = sum + digit; } return sum; } int main(void) { int c; c = getchar(); while ((c = getchar()) != '.') { printf("%d", digit_to_num(c)); return 0; } }
这段代码试图从输入中读取字符,遇到句点停止,并将每个数字字符转换为对应的整数值输出。但代码有几个逻辑问题。

- 在 `main` 函数中,`c = getchar();` 读取了一个字符,但紧接着 `while ((c = getchar()) != '.')` 又读取了下一个字符,导致第一个字符被丢弃。同时,循环内部有 `return 0;`,这意味着循环只会执行一次就结束程序,无法处理多个字符。
- `digit_to_num` 函数虽然能正确将数字字符转换为整数,但变量 `sum` 和累加逻辑是多余的,因为每次只处理一个字符,直接返回 `digit` 即可。

- 检查 `while` 循环的条件和内部 `return` 语句的位置,思考如何让循环持续读取字符直到遇到句点。
- 考虑 `digit_to_num` 函数中 `sum` 变量的作用是否必要,以及如何简化它。