Online Compiler C

#include <stdio.h> int main() { int n,i=10,a=0,b,sum=0; scanf("%d",&n); b=n/i; while(b>0){ a=n%i; i*=10; sum=sum+a; } prinf("%d",sum); return 0; }
这段代码试图计算一个整数的各位数字之和,但存在几个问题。

代码的思路是每次取最低位数字(通过 `n % i`),然后累加,但循环条件和变量更新有逻辑错误。

- 变量 `i` 初始为10,`b = n / i` 得到的是去掉最低位后的数字,但循环条件 `while(b > 0)` 中 `b` 从未更新,会导致死循环或错误结果。
- 每次循环中 `i *= 10` 会改变取模的基数,但 `a = n % i` 取到的数字会包含更多低位,而不是单独的一位数字。
- 最后一行 `prinf` 是拼写错误,应为 `printf`。

- 提示1:思考如何每次只取出当前最低位的一位数字,而不是用不断增大的 `i` 取模。通常用 `n % 10` 得到个位,然后 `n = n / 10` 去掉个位。
- 提示2:循环条件应该基于 `n` 本身是否大于0,而不是基于一个不更新的变量 `b`。