C插入排序程序因许多输入而失败

C插入排序程序因许多输入而失败,c,arrays,sorting,C,Arrays,Sorting,嗨 我是C语言的新手,在对一组数字进行排序时遇到了困难 如果我输入'53095',它将正确返回95530 然而,“53 00 9 9 10 11 13 14 9”并没有返回任何东西。一些调试显示它到达3,然后停止 我应该从哪里开始寻找 以下是我的代码,但一般建议可以: #include <stdio.h> #include <stdlib.h> int getvals(int A[]); void val_swap(int *a,int *b); int main()

我是C语言的新手,在对一组数字进行排序时遇到了困难

如果我输入'53095',它将正确返回95530

然而,“53 00 9 9 10 11 13 14 9”并没有返回任何东西。一些调试显示它到达3,然后停止

我应该从哪里开始寻找

以下是我的代码,但一般建议可以:

#include <stdio.h>
#include <stdlib.h>

int getvals(int A[]);
void val_swap(int *a,int *b);

int main() {
    int len = 0;
    int vals[len];

    len = getvals(vals);

    int i = 0, j = 0;
    /* Search through the values from start to finish */
    for (; i < len; i++) {
        /* Search back through the values, right to left. If we find a smaller value, swap. */
        for (j = i-1; j >= 0 && vals[j+1] > vals[j]; j--) {
            /* Swap */
            val_swap(&vals[j], &vals[j+1]);
        }
    }

    /* Print the sorted array */
    int k = 0;
    for (; k < len; k++) {
        printf("%d ", vals[k]);
    }

    return 0;
}

int getvals(int A[]) {
    /* Gets a list of integer values from the user */ 
    int num, arr_len = 0;
    printf("Enter numbers. CTRL + D to end: ");
    while(scanf("%d", &num)) {
        A[arr_len] = num;
        arr_len++;
    }
    return arr_len;
}

void val_swap(int *a, int *b) {
    int tmp;
    /* Save the value of b to temp var */
    tmp = *b;
    /* Swap the pointer values */
    *b = *a;
    /* Reassign value */
    *a = tmp;
}
#包括
#包括
int getvals(int A[]);
无效val_掉期(int*a,int*b);
int main(){
int len=0;
国际VAL[len];
len=获取VAL(VAL);
int i=0,j=0;
/*从头到尾搜索这些值*/
对于(;i=0&&vals[j+1]>vals[j];j--){
/*交换*/
val_掉期(&val[j],&val[j+1]);
}
}
/*打印已排序的数组*/
int k=0;
对于(;k
可能getvals的返回值小于'5 3 0 0 9 9 10 11 13 14 9'的数量,因此数据太多

但是我想知道当len为0时,它是否能通过编译int-vals[len],我们不说这是否正确,但是vals的大小已经固定,因为vals的空间在堆栈中,没有堆


所以在我看来,没有足够的空间来运行这个程序

int len=0之后,您希望在
vals[]
中有多大尺寸;国际VAL[len];len=获取VAL(VAL)?在哪里调整VAL阵列的大小?它的长度为零。你知道使用
malloc()
free()
,即动态内存分配吗?你的
scanf
也是错误的,因为它允许在EOF条件下继续(该条件
scanf
可以返回,并且不等于零,仅供参考。)@Yunnosch Oops!谢谢,我修好了!(C数组很奇怪dd)这是正确的。我正在访问我无法访问的内存位置。VAL[1000]工作正常!祝贺