[C] Tablica z strukturą i listą
Ostatnio zmodyfikowano 2016-01-02 20:57
macwie Temat założony przez niniejszego użytkownika |
[C] Tablica z strukturą i listą » 2016-01-02 20:25:13 Witam mam problem z moim programem :( Zdefiniowałem strukturę Produkt: typedef struct { char nazwa_prod[ 80 ]; char jednostka[ 10 ]; float ilosc; } Produkt;
oraz listę w której znajduje się struktura Produkt: typedef struct Lista { Produkt dane; struct Lista * next; } el_listy;
oraz strukturę zawierającą nazwę przepisu i listę powyżej: typedef struct { char nazwa[ 80 ]; el_listy * pierwszy; } Danie;
Ogólnie chodzi o program z bazą przepisów. Jest tablica Danie (150 wierszy) gdzie znajdują się nazwy przepisów i potrzebne do ich wykonania składniki. Tak wygląda dodawanie pierwszego składnika na listę: tab_dan[ i ].pierwszy =( el_listy * ) malloc( sizeof( el_listy ) ); strcpy( tab_dan[ i ].pierwszy->dane.nazwa_prod, element.nazwa_prod ); tab_dan[ i ].pierwszy->dane.ilosc = element.ilosc; strcpy( tab_dan[ i ].pierwszy->dane.jednostka, element.jednostka ); tab_dan[ i ].pierwszy->next = NULL;
Problem mam przy dodawaniu na listę, kiedy składników jest więcej niż 1. Tak wygląda dodawanie w tym przypadku: wsk = tab_dan[ i ].pierwszy;
while( wsk->next != NULL ) { wsk = wsk->next; }
nowy =( el_listy * ) malloc( sizeof( el_listy ) );
strcpy( nowy->dane.nazwa_prod, element.nazwa_prod ); nowy->dane.ilosc = element.ilosc; strcpy( nowy->dane.jednostka, element.jednostka ); nowy->next = NULL; wsk->next = nowy;
Program kompiluje się, ale wywala przy pętli while i nie mam pojęcia co robię nie tak przy przesuwaniu wskaźnika na kolejny element listy :( |
|
carlosmay |
» 2016-01-02 20:33:11 nowy->next = NULL; wsk->next = nowy;
Wydaj się, że nie ta kolejność. |
|
macwie Temat założony przez niniejszego użytkownika |
» 2016-01-02 20:40:46 Niestety, przestawienie tych 2 linijek nic nie dało ;/ Z drugiej strony program wywala się przy while'u, a te 2 instrukcje są wykonywane dopiero po nim. |
|
carlosmay |
» 2016-01-02 20:57:18 Trochę pokręcony ten kod. Ciężko tam się połapać. Widać, że wskaźniki nie są wyzerowane NULL'em w momencie tworzenia obiektu, a pętla szuka właśnie wskaźnika wyzerowanego. A że go nie ma to wychodzi poza listę. |
|
« 1 » |