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

#include <stdio.h> int digit_sum(unsigned int n) { int temp=0; if(n==0) { printf("%d\n",temp); } while(n/10!=0) { temp=temp+n%10; n=n/10; } printf("%d\n",temp); return 0; }
这段代码定义了一个函数 `digit_sum`,目的是计算一个无符号整数的各位数字之和。但代码中存在逻辑问题,导致输出结果不正确。

- 函数在 `n==0` 时只打印了 `temp`(初始为0),然后没有返回,会继续执行后面的 `while` 循环,但此时 `n` 已经是0,循环条件 `n/10!=0` 不成立,所以会再次打印 `temp`(还是0),导致重复输出。
- 当 `n` 不为0时,`while` 循环会累加各位数字,但循环结束后,`temp` 中缺少了最高位数字(因为循环条件 `n/10!=0` 会在处理到最高位之前停止)。例如输入123,循环会累加3和2,但不会累加1,导致结果错误。
- 函数最后总是打印 `temp`,但根据题目要求,函数应该返回数字和,而不是打印。打印应该放在调用处。

- 提示1:检查 `while` 循环的条件,思考当 `n` 变成一位数时,这个数字是否被累加到了 `temp` 中?循环条件应该如何处理最后一位数字?
- 提示2:函数应该返回计算出的数字和,而不是在函数内部打印。思考如何修改函数,使其返回 `temp` 的值,并在 `main` 函数中调用并打印结果。