在线编译器 C

#include <stdio.h> int main() { int num,max,i=0; while(1){ scanf("%d",&num); a[i]=num; i++; if(num == 0) break; } int a[i]={0}; int dot=0; max = a[0]; while(dot<=i){ if (max>a[dot]) max = a[dot]; } printf("%d",max); return 0; }
这段代码试图读取一系列整数,找到其中的最大值并输出。但代码存在几个问题。

首先,代码中使用了未声明的数组 `a`,在第一次循环里就尝试向 `a[i]` 赋值,但此时数组 `a` 还没有被定义。之后又用 `int a[i]={0};` 重新声明了数组,但此时 `i` 已经记录了输入数字的个数,而且这个声明位置也不对。

其次,寻找最大值的循环条件 `dot<=i` 会导致访问数组越界,因为数组下标从0到i-1。另外,循环内部没有更新 `dot` 的值,会陷入死循环。判断最大值的逻辑也有问题,当前写法是当 `max > a[dot]` 时更新 `max`,这实际上是在找最小值。

- 数组必须先声明再使用,而且声明时大小必须是确定的。思考一下应该在什么时候声明数组,以及如何确定它的大小。
- 检查寻找最大值的循环:循环变量需要递增,循环条件要正确,比较逻辑要符合“找最大值”的目标。