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()
。一个数组通过简单的定义在堆栈上分配,其大小不能改变。是的,我同意。这是两个不同的选项。获取元素的数量并将该数组放在堆栈上,或者动态分配数组,然后根据需要重新分配。