在线编译器 C

#include <stdio.h> int main() { int unsigned num; int max = 0; int min = 9; if (num == 0) printf("0"); scanf("%u", &num); while (num > 0) { int d = num % 10; num = num / 10; if (d >= max) { max = d; } if (d <= min) { min = d; } } printf("%d %d", min, max); return 0; }
这段代码的目的是读取一个无符号整数,然后找出它的十进制表示中的最小数字和最大数字,并输出它们。

代码中存在一个逻辑顺序问题:在读取用户输入之前,就已经使用了 `num` 变量来判断是否为0。此时 `num` 未被初始化,其值是不确定的,这会导致程序行为不可预测。

- 你应该先使用 `scanf` 读取用户输入,然后再对 `num` 的值进行判断和处理。
- 另外,当输入的数字为0时,循环不会执行,`min` 和 `max` 会保持初始值(9和0),但此时正确的输出应该是最小数字和最大数字都是0。你需要考虑如何处理输入为0的情况。