Online Compiler C

#include <stdio.h> int digit_sum(unsigned int n) { int temp=0; if(n==0) { return n; } if(n<10) { return n; } while(n/10!=0) { temp=temp+n%10; n=n/10; } printf("%d\n",temp); return temp; }
这段代码定义了一个函数 `digit_sum`,用于计算一个无符号整数的各位数字之和。它通过循环逐位提取数字并累加,但存在一些逻辑问题。

- 函数在循环结束后打印了 `temp` 的值,但根据函数名和返回值,它应该只返回结果,而不是打印。打印操作可能不是预期的行为。
- 循环条件 `while(n/10!=0)` 会在 `n` 变成个位数时停止,但此时最后一位数字(即个位)没有被累加到 `temp` 中。例如,输入 `123`,循环会累加 `3` 和 `2`,但不会加上 `1`,导致结果错误。

提示:
- 检查循环结束后,`n` 的值是什么?是否还有一位数字没有被处理?
- 思考函数是否应该包含 `printf` 语句,或者是否应该只通过 `return` 返回结果。