• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyswietlenie elementow listy jednokierunkowej

0 głosów
38 wizyt
pytanie zadane 19 stycznia w C i C++ przez dzuulie Nowicjusz (120 p.)

Witam!

Mam problem z wyswietleniem listy w menu. Gdy dodaje elementy to ta lista mi sie ladnie pokazuje, ale gdy pozniej chce przejsc do pozycji drugiej - czyli wyświetlanie wszystkich elementów listy, to juz jej nie ma. Bardzo prosze o pomoc! 

#include <iostream>
using namespace std;

struct tListaItem
{
    int dane;
    tListaItem *nastepny;
};

void nowy(tListaItem** glowa, int wartosc)
{
    if (*glowa == NULL)
    {
        *glowa = new tListaItem();
        (*glowa)->nastepny = NULL;
        (*glowa)->dane = wartosc;
    }
    else {
        tListaItem *tmp = *glowa;
        tListaItem *nowy = new tListaItem();
        
        nowy->nastepny = NULL;
        nowy->dane = wartosc;
        
        while (tmp->nastepny)
        {
            tmp = tmp->nastepny;
        }
        tmp->nastepny = nowy;
        
    }
}

void pokaz(tListaItem* glowa)
{
    int element =0;
    while (glowa)
    {
        cout << glowa-> dane << endl;
        element++;
        glowa = glowa->nastepny;
    }
    cout << "Lista ma " << element << " elementow" << endl;
}

int main()
{
poczatek:
    tListaItem *glowa = NULL;
    int a ,liczba;
    char wybor;
    cout << "MENU" << endl;
    cout <<"a. dodawanie elementow na koncu listy \nb. wyswietlenia wszystkich elementow listy \nc. usuniecie dowolnego elementu listy \nd. zakoncz program" << endl;
    cin >> wybor;
    switch(wybor)
    {
        case 'a':
        {
            cout << " Ile chcesz dodac elementow? " << endl;
            cin >> liczba;
            for(int i=0; i<liczba; i++)
            {
                cout << "Podaj" << i <<  "element:" << endl;
                cin >> a;
                nowy(&glowa, a);
                pokaz(glowa);
            }
            break;
        }
        case 'b':
        {
            pokaz(glowa);
            break;
        }
        case 'c':
        {
            
        }
        case 'd':
        {
            exit(0);
            break;
        }
    }

    goto poczatek;
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 20 stycznia przez gagyn Gaduła (4,120 p.)

Problem jest spowodowany tym, że za każdym razem, kiedy przechodzisz na początek, wskaźnik glowa ustawiasz na null, tym samym tracisz dostęp do listy.

tListaItem *glowa = NULL;

Linijka poczatek: musi znajdować się po przypisywaniu wartości null, tak aby nastąpiło to tylko raz - na początku programu.

komentarz 20 stycznia przez Hiskiel Pasjonat (21,530 p.)
To ja może naprostuję - linijka poczatek: i goto poczatek; nie musi i nie może tam być.
komentarz 20 stycznia przez dzuulie Nowicjusz (120 p.)

@gagyn, Faktycznie. Dzięki wielkie!

Podobne pytania

0 głosów
1 odpowiedź 151 wizyt
pytanie zadane 12 maja 2017 w C i C++ przez AndekQR Użytkownik (880 p.)
0 głosów
0 odpowiedzi 71 wizyt
0 głosów
3 odpowiedzi 313 wizyt
pytanie zadane 23 października 2017 w C i C++ przez kris6700 Nowicjusz (220 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

61,351 zapytań

107,293 odpowiedzi

223,438 komentarzy

33,037 pasjonatów

Przeglądających: 168
Pasjonatów: 4 Gości: 164

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...