C用户输入数组的大小

时间:2014-03-30 20:55:40

标签: c arrays

我正在尝试编写一个程序,可以创建一个基于用户输入大小的数组,然后将结构存储在里面。 该结构将包含两个整数和两个浮点数。

我的主要问题是,如何根据用户输入创建大小数组? 这就是我到目前为止所做的:

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

}

5 个答案:

答案 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);