我正在尝试编写一个程序,可以创建一个基于用户输入大小的数组,然后将结构存储在里面。 该结构将包含两个整数和两个浮点数。
我的主要问题是,如何根据用户输入创建大小数组? 这就是我到目前为止所做的:
struct inventoryItem
{
int itemNumber;
float cost;
float retailPrice;
int itemsInStock;
}
int main()
{
printf("Enter the number of slots needed in the array: ");
int size;
scanf("%d", &size);
struct inventoryItem inventory[size]; //problem here
}
我对使用C语言编程相当陌生,因此不太复杂的解决方案将会受到赞赏。
编辑: 所以现在我已经解决了第一部分,我现在正在尝试创建第二个数组,该数组保存指向第一个数组的数据(索引)的指针。 现在问题是我不知道如何创建一个for循环,它可以将指针指向第一个数组并将它们存储到第二个数组中。 我将indexArray声明为' int'并且我不确定这是否正确。
这是我到目前为止所做的:
struct inventoryItem
{
int itemNumber;
int itemsInStock;
float cost;
float retailPrice;
};
int main()
{
printf("Enter the number of slots needed in the array: ");
int size;
scanf("%d", &size);
//array of items
struct inventoryItem *inventory; //use pointer to item
inventory =(struct inventoryItem *) malloc(sizeof(struct inventoryItem)*size); //create array to store inventoryItem with size 'size'
//array of index
int *indexArray = (int*) malloc(sizeof(int)*size); //not sure if this is right
//fill array contents
for(int i = 0; i < size; i++)
{
printf("Enter item %d number: ", i);
scanf("%d", &inventory[i].itemNumber);
printf("Enter item %d stock: ", i);
scanf("%d", &inventory[i].itemsInStock);
printf("Enter item %d cost: ", i);
scanf("%f", &inventory[i].cost);
printf("Enter item %d price: ", i);
scanf("%f", &inventory[i].retailPrice);
}
for(int i = 0; i < size; i++)
{
printf("Item %d number: %d\n", i, inventory[i].itemNumber);
printf("Item %d stock: %d\n", i, inventory[i].itemsInStock);
printf("Item %d cost: %f\n", i, inventory[i].cost);
printf("Item %d retail price: %f\n", i, inventory[i].retailPrice);
}
//stuck here
//struct inventoryItem *header = inventory; //error here
for(int i = 0; i < size; i++)
{
//indexArray[i] = inventory[i];
}
}
答案 0 :(得分:4)
您应该使用malloc动态分配数组的大小
#include <stdlib.h>
int main()
{
struct inventoryItem *inventory; //use pointer to item
printf("Enter the number of slots needed in the array: ");
int size;
scanf("%d", &size);
//after you get the size input
inventory = malloc(sizeof(struct inventoryItem)*size);
}
最后,您应该使用free
释放内存
答案 1 :(得分:4)
假设您的“问题”是编译器对象,如果您正在使用GCC或Clang,请尝试将标记-std=c99
或-std=c11
添加到命令行。 GCC默认使用没有此功能的旧版C语言。
除非您打算返回数组,否则不需要malloc
。始终使用最简单的方法。
答案 2 :(得分:0)
你需要使用动态内存分配才能做到这一点......
struct inventoryItem *inventory=(struct inventoryItem *)malloc(size* sizeof(struct inventoryItem));
希望它有所帮助......
答案 3 :(得分:0)
在C中,您需要自己管理内存。
有两种方法可以实现目标:
动态内存分配
像其他人已经指出的那样,使用malloc。但是,如果不再需要,请不要忘记使用free
释放内存:
inventory =(struct inventoryItem *) malloc(sizeof(struct inventoryItem)*size);
/* start working */
/* when you are done, release the memory */
free(inventory);
静态内存分配
尽管通常不是优选的,但有时需要静态地启动存储器中的空间。但要知道,这个内存永远保留用于存储指定数量有限的对象。在您的情况下,您可以为用户提供指定对象数量的完全自由,这可能不是最佳解决方案。
struct inventoryItem
{
int itemNumber;
float cost;
float retailPrice;
int itemsInStock;
}
struct inventoryItem itemlist[20];
int main()
{
printf("Enter the number of slots needed in the array: ");
int size;
scanf("%d", &size);
/* start working on the first <size> objects */
}
答案 4 :(得分:0)
像其他人指出的那样,你也可以用calloc函数来做。这也是动态内存分配的一种,你可以通过以下方式使用它:
Inventory=(struct inventoryItem *)calloc(sizeof(struct inventoryItem),size);
工作结束后别忘了释放内存:
free(inventory);