我是C的初学者。我想创建一个数组,其大小将取自scanf函数的用户,因为数组可能具有任何在程序启动时都不知道的大小。
我怎样才能输入数组元素:
我希望我的程序输出为:
请输入数组元素的数量:4 输入元素:12 43 5 6 您输入的元素是:12 43 5 6
有可能这样做吗?我该如何制作这样的输出?
答案 0 :(得分:4)
是的,这是非常可能的。它被称为动态内存分配。 你要做的是创建一个指针,然后分配它 后来。
int *array;
int num_elements;
//Get number of elements here
array = (int *)malloc(sizeof(int) * num_elements);
if(!array){ //Good practice to check if the allocation worked
printf("Allocating %d bytes failed\n", (int)sizeof(int) * num_elements);
return -1;
}
//Use the array are normal
free(array); // don't forget to free allocated memory
指针访问就像静态数组一样,即数组[0] =无论
编辑:
不要忘记在使用malloc()
时应该包含stdlib.h答案 1 :(得分:3)
动态内存很适合您的目的,但正如前面提到的Gopi,C99允许您直接使用堆栈。
这是使用堆栈而不是堆内存的另一种解决方案:
#include <stdio.h>
int main(void)
{
int nb;
scanf("%d", &nb);
printf("%d\n", nb);
// declaration
char my_tab[nb];
if (nb > 2)
{
// I use my table as I want...
my_tab[0] = 'a';
my_tab[1] = 0;
printf("%s\n", my_tab);
}
return (0);
}
我希望这会帮助你更好地理解不同类型的内存分配。
答案 2 :(得分:0)
使用基本知识执行此操作的简单方法可能是将用户输入设置为变量,然后在描述数组大小时使用它:
#include <stdio.h>
int main(void)
{
int arraysize, i;
printf("Please input an array size.\n");
scanf("%d", &arraysize); //Will set the user input and use it as array size
getchar(); //Has user hit enter to continue
i = arraysize; //This is for sheer convenience in the for() loop
int array[i]; //This creates an array of the size inputted by the user
printf("Please input %d numbers to fill the array.\n", i);
for(i = 0; i<arraysize; i++) //Has the user put in a number for every space in the array
{
scanf("%d", &array[i]); //The i coordinate updates with the i++
getchar();
}
printf("Your numbers were: \n");
for(i = 0; i<arraysize; i++) //Same thing as the previous for() loop
{ //except we are printing the numbers in the table
printf("| %d |", array[i]);
}
}
输出如下:
[PROGRAM BEGINS]
Please input an array size.
5
Please input 5 numbers to fill the array.
1 2 33 4 5
Your numbers were:
| 1 || 2 || 33 || 4 || 5 |
[PROGRAM ENDS]
希望有所帮助!