C编程-如何使用While循环保存用户';s数组中的值

C编程-如何使用While循环保存用户';s数组中的值,c,arrays,while-loop,C,Arrays,While Loop,我试图从用户的输入创建一个数组,然后我将分析它,并判断它是否是对称数组 但是我的while循环中已经有一个问题,我不知道问题出在哪里 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ int array[] = {}; int i = 0; int user = 0; i

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

但是我的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;   
}
问题出在哪里??? 对不起,有多个变量(j k i),但我认为在不同的循环中使用相同的变量会产生干扰…

问题是

int array[]         = {};
它基本上是一个零大小的数组,在C中,数组不能被重新调整大小

正是由于这个原因,在代码中对
array[i]
的每次访问都是无效的内存访问,会调用


您必须提供一个较长的初始值设定项列表,以获得有意义的数组大小,使其可用。

问题在于

int array[]         = {};
它基本上是一个零大小的数组,在C中,数组不能被重新调整大小

正是由于这个原因,在代码中对
array[i]
的每次访问都是无效的内存访问,会调用


您必须提供一个较长的初始值设定项列表,以使数组具有有意义的大小,从而使其可用。

“提供一个较长的初始值设定项列表,以使数组具有有意义的大小,从而使其可用。”您能给我举个例子吗?@Jurafsky
int array[]={1,2,3,4,5}
是一个简单而好的例子。但问题是,在我的例子中,用户必须写下数字。。。因此,当我初始化数组时,我既不知道大小也不知道大小values@Jurafsky您可以通过动态内存分配来解决这个问题。但是暂时忘掉这一点,专注于学习数组是如何工作的(然后是指针)。@Jurafsky在动态输入的情况下,固定大小的数组不是最好的解决方案。您必须对所需的内存使用动态内存分配和重新分配,但这是下一章。现在,您可以从一个固定大小的数组开始,并限制用户输入的数量(例如,100或1000),这应该可以正常工作。“提供一个较长的初始值设定项列表,使数组具有有意义的大小以使其可用。”您能给我举个例子吗?@Jurafsky
int-array[]={1,2,3,4,5}
是一个简单而好的例子。但问题是,在我的例子中,用户必须写下数字。。。因此,当我初始化数组时,我既不知道大小也不知道大小values@Jurafsky您可以通过动态内存分配来解决这个问题。但是暂时忘掉这一点,专注于学习数组是如何工作的(然后是指针)。@Jurafsky在动态输入的情况下,固定大小的数组不是最好的解决方案。您必须对所需的内存使用动态内存分配和重新分配,但这是下一章。现在,您可以从一个固定大小的数组开始,并限制用户输入的数量(例如,100或1000),这应该可以正常工作。这甚至不应该编译。您的编译器可能配置错误。如果您使用的是gcc,您必须指定
gcc-std=c11-pedantic errors
,以防止它变得愚蠢。这甚至不应该编译。您的编译器可能配置错误。如果您使用的是gcc,您必须指定
gcc-std=c11-pedantic errors
,以防止它变得愚蠢。