Online Compiler C

#include <stdio.h> int main() { int num,max,i=1; int a[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` 数组,第一次用 `int a[i]={0};` 时 `i` 为1,所以数组大小只有1,无法存储多个输入。第二次声明 `int a[i]={0};` 时 `i` 已经变化,但数组大小仍然固定,且第二次声明会覆盖第一次,导致之前存储的数据丢失。
- 在读取循环中,你从 `a[1]` 开始存储,但数组索引通常从0开始,这样会跳过第一个元素。
- 寻找最大值的循环中,条件 `dot<=i` 可能导致访问越界,因为数组最后一个有效索引是 `i-1`。同时循环体没有更新 `dot`,会陷入死循环。
- 比较逻辑有误:`if (max>a[dot])` 表示当当前值小于max时更新max,这实际上是找最小值,而不是最大值。

- 思考如何在不使用数组的情况下,一边读取一边更新最大值,这样更简单且避免数组大小问题。
- 如果坚持使用数组,需要先确定数组大小(比如设定一个足够大的固定大小,或者先读取所有数字再分配),并注意索引从0开始。