Вот моя программа, по существу, помимо функций «добавить». Функция numItems должна получать «элемент» в качестве входных данных и просматривать все вещи игроков, а также суммировать количество элемента (если оно есть). Итак, моя проблема в том, что у игрока 1 есть 3 собаки, у игроков 2 было 5 собак, функция будет только считать 3, а затем закончена. Когда я попытался отладить его с помощью printf, который печатает какой элемент «iptr» включен, я получаю ошибку seg сразу, когда обнаруживает, что второе появление собаки. Я просто чувствую, что это должно быть простым решением.Подсчет узлов в связанном списке
typedef struct item {
char *name;
int count;
struct item *next;
} Items;
typedef struct player {
char *name;
Items *things;
struct player *next;
} Players;
int numItems(Players *list, char *item) {
Players * ptr = list;
Items* iptr = ptr->things;
int count = 0;
int i = 0;
while(ptr != NULL) {
while(iptr != NULL) {
if(strcmp(iptr->name, item) == 0) {
printf("first if: %s", iptr->name);
}
else {
i++;
}
iptr = iptr->next;
}
ptr = ptr->next;
}
return count;
}
Итак, 'iptr = ptr-> вещи' правильно? Если я добавлю это непосредственно после 'ptr = ptr-> next' в цикле' ptr', я получаю немедленную ошибку seg. Это где он должен быть добавлен? –
Попробуйте инициализировать его в верхней части цикла указателя, где вы знаете, что 'ptr' не равно нулю. – PerpetualStudent
Он работает! Спасибо, парни. –