Online Compiler C

#include <stdio.h> int main() { int n; scanf("%d",&n); int a[n]; for(int i=0;i<=n-1;i++) { scanf("%d",&a[i]); } if(n==0) { printf("%d",n); } int max=a[0]; int min=a[0]; for(int i=0;i<=n-1;i++) { if(a[i]>max) { max=a[i]; } if(a[i]<min) { min=a[i]; } } int b=max-min; printf("%d\n",b); return 0; }
这段代码的功能是:先读取一个整数 n,然后读取 n 个整数存入数组,最后计算并输出这 n 个数中最大值与最小值的差。

代码中存在一个逻辑问题:当 n 为 0 时,程序会先输出 0,但之后仍然会尝试访问 a[0] 来初始化 max 和 min,这会导致数组越界,因为数组 a 的长度为 0。

- 当 n 为 0 时,应该直接结束程序,而不是继续执行后面的代码。可以考虑在输出 0 后使用 return 语句提前退出。
- 另外,当 n 为 0 时,数组 a 没有元素,所以不能访问 a[0]。需要确保只有在 n 大于 0 时才进行后续的最大最小值计算。