在线编译器 C

#include <stdio.h> int main() { int num,max,i=0; 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; }
这段代码试图从输入中读取一系列整数,找到其中的最大值并输出。但代码存在多个问题。

首先,你声明了一个长度为0的数组 `a[i]`,因为 `i` 初始为0。数组长度必须是编译时确定的常量,不能是0,也不能在运行时动态改变。之后你又重新声明了另一个同名的数组,这会导致编译错误。

其次,第二个循环中,你比较 `max` 和 `a[dot]`,但条件写反了:当 `max > a[dot]` 时你更新 `max`,这实际上是在找最小值。而且循环没有更新 `dot` 的值,会陷入死循环。

- 数组的长度必须在声明时就确定,不能为0。你需要先知道要存储多少个数字,或者使用固定大小的数组。
- 第二个循环中,检查比较逻辑是否正确,并确保循环变量 `dot` 每次迭代都会递增。