2016-04-08 31 views
-1

Programım esasen "eklenti" işlevlerinin yanı sıra benim programım. NumItems işlevinin girdi olarak 'öğe' alması ve her bir Oyuncunun şeylerine bakması ve öğenin miktarını eklemesi gerekir (eğer varsa). Yani, benim sorunum, Oyuncu 1'in 3 köpeği var, Oyuncular 2'nin 5 köpeği vardı, bu fonksiyon sadece 3'ü sayıp sonra bitecek. 'Iptr' öğesinin hangi öğeyi yazdırdığını gösteren bir printf ile hata ayıklamaya çalıştığımda, bu köpeğin ikinci oluşumunu bulduğunda bir seg hatası aldım. Sadece bunun için basit bir çözüm olması gerektiğini düşünüyorum.Bağlı listedeki düğüm öğeleri sayma

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; 
} 

cevap

0

iptrptr her yeni boş olmayan bir değer için yeniden başlatılması.

+0

Yani 'iptr = ptr-> şeyler doğru mu? Bunu doğrudan 'ptr' döngüsünde 'ptr = ptr-> sonraki' sonra eklerseniz hemen bir seg hatası alırım. Eklenmesi gereken yer burası mı? –

+0

İşaretçi döngüsünün en üstünde, ptr'nin null olmadığını bildiğiniz yerde başlatmayı deneyin. – PerpetualStudent

+0

Çalışıyor! Teşekkürler beyler. –

İlgili konular