【问题标题】: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];
或动态地,使用malloc 或calloc(后者定义为void *calloc(size_t nitems, size_t size)):
cats *myCatsArray = calloc( 10, sizeof (cats)):
只是避免将静态定义为函数的局部变量,以免在堆栈中占用太多内存。在动态分配的情况下,一旦不再需要这些结构,您必须记住 free()。
分配完所有需要的 N 只猫后,您可以根据自己的要求填充它们的字段。
在这两种情况下,您都可以通过这种方式访问一个元素(比如说第六个)
int myCode = myCatsArray[5].code;