C 编程 - 如何使用 While 循环将用户的值保存在数组中

Key*_*yPi 0 c arrays while-loop

我试图从用户的输入创建一个数组,然后我会分析它并判断它是否是一个对称数组。

但是我的 while 循环中已经有问题了,我不明白问题出在哪里。

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

int main(){
    int array[]         = {};
    int i               = 0;
    int user            = 0;
    int k               = 0;
    int size_array      = 0;
    int j               = 0;


    printf("Write some numbers, -1 to end \n");

    while(user != -1){
        printf("k = %d\n", k);
        scanf("%d", &user);
        array[i] = user;

        i = i+1;
        k = k+1;
    }

    size_array = k;
    printf("nb of entries = %d\n", size_array);

    for (j = 0; j < size_array; j++){
        printf("%d",array[j]);
    }
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

Write some numbers, -1 to end
k = 0
1
k = 1
1
k = 2
1
k = 2
1
k = 3
1
k = 2
2
k = 3
2
k = 4
2
k = 5
2
k = 6
2
k = 7
2
k = 8
-1
nb of entries = 9
919026867601999609396268686841986531
Process returned 0 (0x0)   execution time : 10.320 s
Press any key to continue.
Run Code Online (Sandbox Code Playgroud)

问题出在哪里???抱歉有多个变量(jki),但我认为对不同的循环使用相同的变量会产生干扰......

Sou*_*osh 5

问题是

int array[]         = {};
Run Code Online (Sandbox Code Playgroud)

这基本上是一个零大小的数组,在 C 中,数组不能重新调整大小

正是出于这个原因,array[i]您代码中的每次访问都是无效的内存访问,它会调用未定义的行为

您必须要么提供一个更长的初始化列表的大小,以使数组具有有意义的大小以使其可用