Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Tablica z strukturą i listą

Ostatnio zmodyfikowano 2016-01-02 20:57
Autor Wiadomość
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:
C/C++
typedef struct
{
    char nazwa_prod[ 80 ];
    char jednostka[ 10 ];
    float ilosc;
} Produkt;
oraz listę w której znajduje się struktura Produkt:
C/C++
typedef struct Lista
{
    Produkt dane;
    struct Lista * next;
} el_listy;
oraz strukturę zawierającą nazwę przepisu i listę powyżej:
C/C++
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ę:
C/C++
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:
C/C++
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 :(
P-142727
carlosmay
» 2016-01-02 20:33:11
C/C++
nowy->next = NULL; // a pozniej koniec listy wyzeruj
wsk->next = nowy; // wpierw przypisz do konca listy nowy element
 Wydaj się, że nie ta kolejność.
P-142730
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.
P-142732
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ę.
P-142736
« 1 »
  Strona 1 z 1