#c
#c
Вопрос:
Итак, у меня есть эти структуры
// structures.
typedef struct{
char *name;
int price;
double weight;
}item;
typedef struct{
item **items;
int num_items;
}inventory;
typedef struct{
char *name;
int level;
long xp;
inventory Inventory;
}character;
Я уже смог создать символ с помощью функции, а затем вызвать другую функцию для просмотра этого символа, но я не могу понять, как выделить место для и элемента или инвентаря.
inventory *add_item(inventory *invp){
if(invp == NULL){
inventory *invp = calloc(1, sizeof(inventory)); // Allocating memory for inventory
items = calloc(1, sizeof(items *)); // need to allocate space for the item **items
char buffer[buf] = { 0 };
printf("Enter name: ");
fgets(buffer, buf, stdin);
remove_newline(buffer);
items->new_item->name = (strlen(buffer) 1, sizeof(char));
strcpy(items->new_item->name, buffer);
printf("Enter price: ");
scanf("%d", amp;items->new_item->price);
while(getchar() != 'n');
printf("Enter weight: ");
scanf("%ld", amp;items->new_item->weight);
while(getchar() != 'n');
return items; // <---- this is the new character just created. }
}
}
это моя функция создания символа
character *create_character(character *c){ // input to this function->address to a structure.
if(c == NULL){
char buffer[buf] = { 0 }; // (so a pointer.)
character *c = calloc(1, sizeof(character));
printf("Enter charcter name: ");
fgets(buffer, buf, stdin);
remove_newline(buffer); // removing the new line.
c->name = calloc(strlen(buffer) 1, sizeof(char)); //allocating memory for character
strcpy(c->name, buffer); // copying input into memory just allocated.
printf("Enter level: ");
scanf("%d", amp;c->level);
while(getchar() != 'n');
printf("Enter XP: ");
scanf("%ld", amp;c->xp);
while(getchar() != 'n');
c->Inventory = calloc(1, sizeof(inventory));
return c; // <---- this is the new character just created. }
}else {
printf("ERROR: Character Already Exist.n");
}
}
Я пытался использовать тот же формат, который я использовал для создания символа для создания элемента, но часть указателя меня смущает, я инициализирую инвентарь внутри c, а затем вызываю ** элементы, чтобы иметь возможность создавать элемент?
Комментарии:
1. Поскольку
Inventory
это экземплярinventory
структуры, его память выделяется вместе с окружающейcharacter
структурой.2. Что касается
inventory
структуры, как вы думаете, зачем вам нужен указатель на указательitems
? Каковы ваши мысли, анализ и дизайн, которые заставили вас подумать, что это было бы хорошим решением? Кроме того, учитывая, что список символов может быть динамическим, почему бы не сделать его связанным списком, в котором вы можете легко добавлять и удалять узлы?3. ну, потому что это назначение для класса, и структуры были даны. Причина, по которой я не использовал список ссылок, заключается в том, что можно создать только один символ, поэтому я не думал, что это необходимо. Итак, вы говорите, чтобы создать список ссылок, который мог бы объединять структуры?
4. пару дней назад возник еще один вопрос, касающийся той же задачи. в основном возникает та же проблема или вопрос. как добавить элемент с заданной структурой инвентаря, не зная его максимальной емкости? я не могу представить себе возможности, кроме глубокого копирования всей структуры инвентаря со всеми ее элементами, а затем создания новой с вновь выделенной памятью для одного дополнительного элемента. это кажется неразумным решением..