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

#include <stdio.h> int digit_sum(unsigned int n) { int temp=0; if(n==0) { printf("%d\n",temp); } 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`,目的是计算一个无符号整数的各位数字之和。但代码中存在一些逻辑问题。

- 函数接收 `unsigned int` 参数,但内部却检查 `n<0`,这是多余的,因为无符号整数永远不会小于0。
- 当 `n==0` 时,函数直接打印 `temp`(初始为0)并结束,但此时没有返回正确的和(虽然0的和是0,但打印后函数继续执行后面的代码,导致重复输出)。
- 主循环 `while(n/10!=0)` 会在 `n` 只有一位数时停止,导致最后一位数字没有被加到 `temp` 中。例如输入123,循环只处理了3和2,漏掉了1。
- 函数在最后打印了 `temp`,但前面已经有过打印,导致输出多余。

- 提示1:检查循环条件,思考当 `n` 变成个位数时,这个数字是否应该被加入总和。
- 提示2:考虑函数应该只计算并返回结果,而不是在函数内部多次打印。思考如何让函数只输出一次正确的和。