Онлайн компилятор 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; }else{ return 0; } return sum; } int main(void) { int c; while ((c = getchar()) != '.') { printf("%d", digit_to_num(c)); } return 0; }
这段代码的功能是:从输入中逐个读取字符,遇到句点 '.' 时停止,并将每个数字字符转换为对应的整数值(0-9)后输出。非数字字符会返回0并输出。

代码中存在一个逻辑问题:`digit_to_num` 函数每次调用都会将 `sum` 初始化为0,然后只加一个数字就返回,所以 `sum` 变量实际上没有起到累加作用,只是返回了单个数字的值。但这不是主要错误。

主要错误在于:当输入字符不是数字时,函数返回0,但题目可能期望忽略非数字字符或进行其他处理。不过根据代码逻辑,这只是一个设计选择。

- 检查 `digit_to_num` 函数中 `sum` 变量的作用。它每次都被重置为0,然后只加一个数字就返回,这个变量其实是不必要的。你可以思考如何简化这个函数,让它直接返回数字值。
- 注意 `main` 函数中,当输入字符不是数字时(比如字母或空格),程序会输出0。请确认这是否符合你的预期。如果希望忽略非数字字符,需要修改条件判断。