2016-04-08 1 views
-1

Вот моя программа, по существу, помимо функций «добавить». Функция 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; 
} 

ответ

0

iptr должен быть повторно инициализирован для каждого нового ненулевого значения ptr.

+0

Итак, 'iptr = ptr-> вещи' правильно? Если я добавлю это непосредственно после 'ptr = ptr-> next' в цикле' ptr', я получаю немедленную ошибку seg. Это где он должен быть добавлен? –

+0

Попробуйте инициализировать его в верхней части цикла указателя, где вы знаете, что 'ptr' не равно нулю. – PerpetualStudent

+0

Он работает! Спасибо, парни. –

 Смежные вопросы

  • Нет связанных вопросов^_^