Онлайн компилятор C

#include <stdio.h> int main() { int n; int a[n]; for(int i=0;i<=n;i++) { scanf("%d",a[i]); } int max=a[1]; int min=a[2]; if(max<min) {max=a[2] min=a[1]; } for(int i=0;i<=n;i++) { if(a[i]>max) { max=a[i]; } if(a[i]<max) { min=a[i]; } int b=max-min; printf("%d\n",b); } printf("Hello, World!\n"); return 0; }
这段代码试图找出数组中的最大值和最小值,然后计算它们的差。但代码中有几个关键问题。

首先,变量 `n` 在使用前没有被赋值,所以数组 `a[n]` 的大小是未定义的。其次,数组的索引从0开始,但代码中使用了 `a[1]` 和 `a[2]` 来初始化 `max` 和 `min`,这可能会跳过第一个元素。另外,循环条件 `i<=n` 会导致数组越界,因为有效索引是0到n-1。还有,`scanf` 应该传入变量的地址,而不是变量本身。

- 在使用 `n` 定义数组之前,需要先给 `n` 一个确定的值,比如通过 `scanf` 读取用户输入。
- 检查数组索引的范围:循环应该从0到n-1,而不是0到n。同时,初始化 `max` 和 `min` 时,应该使用数组的第一个元素 `a[0]`,而不是 `a[1]` 和 `a[2]`。