我有这个程序:
#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] );
}
}
我想修改我的程序以允许用户输入任意数量的数字,当它们完成时,他们可以输入“-1”,然后退出scanf循环并继续在程序中打印数组。问题是我不明白如何在没有大小的情况下声明一个数组。我知道我可以使用sizeof(myArray / myArray[0]);
来查找数组中的元素数量,但是编译器希望我总是输入一些我不知道的初始大小。
答案 0 :(得分:1)
您可以为阵列使用动态内存。您可以使用malloc
您可以使用realloc
答案 1 :(得分:1)
有两种解决方案:
您可以先询问用户他们计划输入多少个号码,然后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;
}
答案 2 :(得分:1)
最简单的方法是向用户询问他想要输入的许多元素。然后声明一个大小的数组并继续。而不是5使用用户定义的大小。
如果您要输入大量数据,也可以调整数组的大小,这很昂贵。 但在我看来,这些并不是最好的解决方案。用户可能会犯错。 更好的解决方案是使用简单的LinkedList结构。
你应该有一个while循环,当用户输入'EOF'或'-1'或者你认为适合标记输入的结尾时停止。 然后,对于每个新输入,您分配新节点并将其放在列表的末尾。
如果以后仍需要使用数组,则可以分配大小与LinkedList相同的新数组并填充它。