在线编译器 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()) != EOF && c != '.') { printf("%d", digit_to_num(c)); return 0; }
这段代码的目的是从输入中读取字符,遇到句点或EOF时停止,并将每个数字字符转换为对应的整数值后输出。但代码有几个问题。

- 在 `main` 函数中,你调用了一次 `getchar()` 并将结果存入 `c`,但随后在 `while` 循环条件中又立即调用了一次 `getchar()`,导致第一个字符被跳过。循环内部的 `return 0;` 会使程序在第一次循环后就结束,无法处理后续字符。

- `digit_to_num` 函数中,`sum` 变量只累加了一个数字,但函数名暗示可能要做更多处理。实际上,对于单个字符转换,不需要 `sum`,直接返回 `digit` 即可。