I am trying to write a program that can create an array with size based on the user input and then store structs inside.
The struct will contain two ints and two floats.
My main problem is, how do I create an array with size based on the user input?
This is what I have so far:
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
}
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];
}
}
You should use malloc to dynamically allocate the size of array
#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);
}
In the end you should use the free
to free the memory