【问题标题】:Create N elements of struct after input N在输入 N 之后创建结构的 N 个元素
【发布时间】:2020-08-02 02:56:58
【问题描述】:

如何在输入 N 之后创建此结构的 N 个元素?

 typedef struct cat{
 int code;
 int age;
 float weight;
 enum {kibbles,canned_food,tuna_fish}food;
} cats;

int n,i;

printf("Insert a number: ");
scanf("%d",&n);


for(i=0;i<n;i++){
    ....
}

我想创建 N 只猫(命名为 cat1、cat2 等)

【问题讨论】:

    标签: c struct initialization


    【解决方案1】:

    制作一个输入单个struct cat的函数

    struct cat inputsinglecat(void);
    

    在知道需要多少只猫之后,获取所需的内存量

    struct cat *memcat;
    memcat = malloc(n * sizeof *memcat);
    if (memcat == NULL) exit(EXIT_FAILURE);
    

    然后,要输入猫,使用循环和上面定义的函数

    for (int k = 0; k < n; k++) {
        memcat[k] = inputsinglecat();
    }
    

    当你不再需要它时不要忘记释放内存

    free(memcat);
    

    【讨论】:

      【解决方案2】:

      您可以通过创建cats 的数组来静态地执行此操作:

      cats myCatsArray[10];
      

      或动态地,使用malloccalloc(后者定义为void *calloc(size_t nitems, size_t size)):

      cats *myCatsArray = calloc( 10, sizeof (cats)):
      

      只是避免将静态定义为函数的局部变量,以免在堆栈中占用太多内存。在动态分配的情况下,一旦不再需要这些结构,您必须记住 free()

      分配完所有需要的 N 只猫后,您可以根据自己的要求填充它们的字段。


      在这两种情况下,您都可以通过这种方式访问​​一个元素(比如说第六个)

      int myCode = myCatsArray[5].code;
      

      【讨论】:

        猜你喜欢
        • 2021-12-22
        • 2020-03-12
        • 2017-01-07
        • 2015-09-11
        • 2012-09-21
        • 2020-06-01
        • 2015-10-23
        • 2014-12-13
        • 2018-07-09
        相关资源
        最近更新 更多