Создать N элементов структуры после ввода N - PullRequest
0 голосов
/ 19 апреля 2020

Как я могу создать 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 et c ..)

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Сделайте функцию для ввода одного struct cat

struct cat inputsinglecat(void);

После того, как вы знаете, сколько кошек вам нужно, получите необходимый объем памяти

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

Затем введите кошки, используйте al oop и определенную выше функцию

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

Не забудьте освободить память, когда она вам больше не нужна

free(memcat);
0 голосов
/ 19 апреля 2020

Вы можете сделать это статически, создав массив cats:

cats myCatsArray[10];

или динамически, используя malloc или calloc (последний определен как void *calloc(size_t nitems, size_t size)):

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

Просто избегайте определения stati c как локальной переменной функции, чтобы не занимать много памяти в стеке. В случае динамического распределения c вы должны помнить free() структуры, как только они вам больше не нужны.

После распределения всех N кошек, которые вам нужны, вы можете заполнить их поля в соответствии с вашими требованиями.


В обоих случаях вы можете получить доступ к элементу (скажем, шестому) таким образом

int myCode = myCatsArray[5].code;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...