Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用户为未定义大小的数组读入数字_C_Arrays - Fatal编程技术网

C 用户为未定义大小的数组读入数字

C 用户为未定义大小的数组读入数字,c,arrays,C,Arrays,我有这个计划: #include <stdio.h> #include <stdlib.h> int main() { int i; int myArray[5]; printf("Enter some numbers for the array.\n\n"); for( i = 0; i < 5; i++ ) { scanf("%d", &myArray[i]); } printf("\

我有这个计划:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i;
    int myArray[5];

    printf("Enter some numbers for the array.\n\n");

    for( i = 0; i < 5; i++ )
    {
    scanf("%d", &myArray[i]);
    }

    printf("\nPrinting array...\n\n");

    for( i = 0; i < 5; i++)
    {
    printf("%d \n\n", myArray[i] );
    }

}
#包括
#包括
int main()
{
int i;
int-myArray[5];
printf(“为数组输入一些数字。\n\n”);
对于(i=0;i<5;i++)
{
scanf(“%d”,&myArray[i]);
}
printf(“\n打印数组…\n\n”);
对于(i=0;i<5;i++)
{
printf(“%d\n\n”,myArray[i]);
}
}

我想修改我的程序,允许用户输入任意数量的数字,完成后,他们可以键入“-1”,然后退出scanf循环并在程序中继续打印阵列。问题是我不明白如何声明没有大小的数组。我知道我可以使用
sizeof(myArray/myArray[0])
查找数组中的元素数,但编译器希望我始终输入一些我不知道的初始大小。

可以对数组使用动态内存。您可以使用
malloc


您可以使用realloc调整阵列的大小有两种解决方案:

您可以先询问用户计划输入多少个数字,然后
malloc
一个足够大的数组

要以您希望的方式实现解决方案,您需要随时间动态调整阵列大小。比如说

int *array, num_entries = 0, new_entry, array_size_multiple = 10;
array = malloc(array_size_multiple * sizeof *array);
while (1) {
    scanf("%d", &new_entry);
    if (entry == -1) break; // stop when the user enters -1
    if (num_entries % array_size_multiple == 0
        && num_entries > 0) // to protect base case
    { // need to allocate more space
        array = realloc(array, (num_entries / array_size_multiple + 1)
                                * sizeof *array);
    }
    array[num_entries] = new_entry;
    ++num_entries;
}

最简单的方法是让用户现在输入许多他想输入的元素。然后声明一个该大小的数组并继续。使用用户定义的大小,而不是5

此外,如果要输入大量数据,还可以调整阵列的大小,这将非常昂贵。 但在我看来,这并不是最好的解决办法。用户可能会犯错误。 更好的解决方案是使用简单的LinkedList结构

您应该有一个while循环,当用户输入“EOF”或“-1”或任何您认为合适的标记输入结束时停止。 然后,对于每个新输入,分配新节点并将其放在列表的末尾


如果以后仍然需要使用数组,可以分配和LinkedList大小相同的新数组并填充它

听起来您需要使用指针创建一个类似于列表的数据结构,以便可以动态添加任意数量的项。尝试使用列表而不是数组,您可以向列表添加或删除项。“…声明该大小的数组…”:值得注意的是,使用VLA的这种方法需要至少支持C99的编译器。但是“调整已定义数组的大小是不可能的。关于调整已定义数组的大小,我发现这个关于
realloc()
ation的链接只能在动态分配的内存上工作,例如使用
malloc()
。一个数组通过简单的定义在堆栈上分配,其大小不能改变。是的,我同意。这是两个不同的选项。获取元素的数量并将该数组放在堆栈上,或者动态分配数组,然后根据需要重新分配。