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 1; } return sum; } int main(void) { int c; c = getchar(); while ((c = getchar()) != EOF && c != '.') { printf("%d", digit_to_num(c)); return 0; } }
这段代码试图将输入的数字字符转换为对应的整数值并输出,但存在几个逻辑问题。

- `digit_to_num` 函数中,当字符是数字时,`sum` 被重置为0,然后加上数字值,但函数返回的是1而不是计算出的数字值。当字符不是数字时,返回0,但函数名暗示应返回数字本身。
- `main` 函数中,先调用了一次 `getchar()` 读取了一个字符但没有使用,然后循环从第二个字符开始处理。循环内遇到第一个字符就 `return 0` 结束程序,所以最多只处理一个字符。

- 检查 `digit_to_num` 函数的返回值逻辑:当字符是数字时,应该返回数字值本身,而不是固定返回1。思考如何正确返回数字值。
- 检查 `main` 函数中的循环和 `return 0` 的位置:循环应该在处理完所有字符(直到遇到EOF或句点)后才结束,而不是在第一次循环时就退出。