c为什么插序排列报错了?


#include 
#include 
void insertsort(int a[],int n){
//    printf("请输入数组的长度");
//    scanf("%d",n);
//    printf("请输入数");
    int i;
    for(i=1;i<=n-1;i+=1){
    scanf("%d",&a[i]);
    }
    a[0]=0;
    int m,u;//m是抽出来的第几个数 
    for(m=2;m<=n-1;m+=1){
        a[0]=a[m];
        for(u=m-1;u>=1;u--){
            if(a[0]<=a[u]){
                a[u]=a[m];
            }
            else{
                a[u+1]=a[0];
            }
        }
    }
}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    int n,i,a[];
    printf("请输入数组的长度");
    scanf("%d",n);
    printf("请输入数");
    insertsort(a);
    for(i=1;i<=n-1;i++){
        printf("%d",a[i]);
    }
    return 0;
}

1,insertsort函数中第一个for实现从键盘输入n个数,从i=1到n-1总共只有n-1个数哦,应该是从i=0开始吧这样到n-1就有n个数了。
2,而且insertsort函数需要2个参数,你main中只传了1个实参

对于上面的两段代码,可能存在以下几个原因会导致报错:
1.数组a的大小未定义;
2.insertsort()函数未定义;
3.scanf()函数格式不正确;
4.for循环下标越界。