在线编译器 C

#include <stdio.h> int digit_sum(unsigned int n) { int temp=0; if(n==0) { printf("%d\n",temp); } if(n<10) { printf("%d\n",temp); } while(n/10!=0) { temp=temp+n%10; n=n/10; } printf("%d\n",temp); return 0; }
这段代码试图计算一个整数的各位数字之和,但存在逻辑问题。函数 `digit_sum` 接收一个无符号整数 `n`,然后通过循环累加各位数字,但它在循环前后都进行了输出,并且没有正确返回累加结果。

- 代码中在 `while` 循环之前和之后都调用了 `printf`,这会导致重复输出,而且当 `n` 为0或小于10时,输出的是未累加前的 `temp`(值为0),而不是正确的数字和。
- 函数返回了固定的0,而不是计算出的数字和。通常这类函数应该返回累加结果,而不是直接打印。

提示:
- 思考一下,当 `n` 为0或个位数时,数字和就是 `n` 本身,但你的代码中 `temp` 初始为0,所以输出错误。应该如何处理这些边界情况?
- 函数应该返回计算出的数字和,而不是在函数内部打印。这样调用者可以灵活使用这个结果。