有个bug不知道在哪里

输出一个整数序列中最大的数和最小的数的差。

【输入】
第一行为M,表示整数个数,整数个数不会大于10000;

第二行为M个整数,以空格隔开,每个整数的绝对值不会大于10000。

【输出】
输出M个数中最大值和最小值的差。

【输入样例】
5
2 5 7 4 2
【输出样例】
5
#include
using namespace std;
int main()
{int max=-10001;int min=10001;
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i{
scanf("%d",&a[i]);
if(a[i]>=max)
{
max=a[i];
}
if(a[i]<=min)
{
min=a[i];
}
}
printf("%d",max-min);

}

int a[n];
这个语法是错的
首先,在每个块内,所有的定义必须在所有的代码前面,你这个定义在scanf后面就是错的
其次只有C99才支持数组长度放变量,低版本数组长度必须是常量
已经告诉了你不超过10000个数,你直接定义成a[10000]即可

你运行出现什么异常现象了啊?

int a[n]..这里必须是常量

int *p;
p=new int a[n];




delete []p;       主函数末尾 return 0之前

错误他们说的差不多了,我就说解决办法吧!

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[1020];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    int max=a[0];
    int min=a[0];
    for(int i=0;i<n;i++){
        if(a[i]<min){ //找最大
            min=a[i];
        }
        if(a[i]>max){ //找最小
            max=a[i];
        }
    }
    printf("%d",max-min);
    return 0;
}

供参考:

#include <stdio.h>
int main()
{
    int max = -10000; 
    int min = 10000;
    int n, a[10000]; //修改
    scanf("%d", &n);
    //int a[n];     修改
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        if (a[i] > max)   // =
        {
            max = a[i];
        }
        if (a[i] < min)  //=
        {
            min = a[i];
        }
    }
    printf("%d", max - min);
    return 0;
}

数组长度需定义成常量。