user3188716 user3188716 - 29 days ago 9
C Question

C User input size of Array

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

}


I am fairly new to programming in C so a solution that is not too complex would be appreciated.

EDIT:
So now that I have the first part solved, I am now trying to create a second array that holds pointers to the first array's data (an index).
Now the problem is I do not know how to create a for loop that can take the pointers to the first array and store them into the second.
I declared the indexArray as type 'int' and am not sure if that is right.

This is what I have so far:

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];
}

}

Answer

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