在线编译器 C

#include <stdio.h> int main() { int num,max; scanf("%d",&num); max = num; while(num!=0){ scanf("%d",&num); if(num>max){ max=num; } } if(num == 0) printf("%d",max); return 0; }
这段代码的功能是:从输入中读取一系列整数,当遇到0时停止,并输出这些数中的最大值。代码逻辑基本正确,但有一个小问题需要注意。

- 当输入的第一个数就是0时,程序会直接输出0,这符合预期吗?如果预期是“没有有效数字时不应输出”,那么需要处理这种情况。
- 在循环中,每次读取新数后立即与max比较,但第一次读取的num已经赋给了max,所以第一次循环读取的第二个数会正确比较。不过,如果输入的第一个数不是0,但后续输入0时,循环结束前会先读取0并比较,0可能成为新的最大值(如果之前都是负数),这会导致输出0而不是真正的最大值。思考一下:应该在比较之前先判断num是否为0吗?