Онлайн компилятор C

#include <stdio.h> int digit_to_num(char c) { int sum = 0, digit; while (c) { 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; } }
这段代码试图从输入中读取字符,对每个数字字符计算其数值并累加,但存在几个问题。

首先,`digit_to_num` 函数中的 `while (c)` 循环会无限执行,因为 `c` 是一个字符值,循环条件永远为真,而且循环内部没有改变 `c` 的值。这个函数本意可能是处理一个字符,但写成了循环。

其次,`main` 函数中先调用了一次 `getchar()` 但没有使用结果,然后进入循环读取下一个字符。循环内部每次读取一个字符就立即 `return 0`,导致程序只处理一个字符就结束。

- 检查 `digit_to_num` 函数:它应该只处理一个字符,而不是循环。思考如何去掉循环,直接对单个字符进行判断和转换。
- 检查 `main` 中的循环逻辑:循环应该持续读取字符直到遇到 EOF 或句点,但当前循环体中的 `return 0` 导致只执行一次就退出。考虑将 `return 0` 移到循环结束后。