C++ lista jednokierunkowa (problem)

0
#include<iostream>
using namespace std;
int main(){
    struct osoba
    {
           int wiek;
           osoba *next;
    }; 
    
    osoba *begin=NULL;
    int n,year,i=0;
    cout << "Podaj ilosc uczniow: ";
    cin >> n;
    for(int i=0;i<n;i++)
    {
            osoba *elem=new osoba;
            cout << "Podaj wiek " << i+1 << " ucznia : " ;
            cin >> year;
            elem->wiek=year;
            elem->next=NULL;
    }
    cout << "..::Wyswietlanie::.." << endl;
    osoba *ek=begin;
    while(ek!=begin)
    {
                    
                    cout << "Wiek ucznia o indeksie " << i+1 << " wynosi: " ;
                    cout << ek->wiek << endl;
                    ek=ek->next;
                    i++;
    }
            
    system("pause");
    return 0;
}

Wszystko chyba jest dobrze jeśli chodzi i zapisywanie do struktury odpowiedniego wieku ale coś jest nie tak z wyświetlaniem wieku

 cout << "..::Wyswietlanie::.." << endl;
    osoba *ek=begin;
    while(ek!=begin)
    {
                    
                    cout << "Wiek ucznia o indeksie " << i+1 << " wynosi: " ;
                    cout << ek->wiek << endl;
                    ek=ek->next;
                    i++;
    }

W konsoli pojawi się tylko napis "..::Wyswietlanie::.." i to wszystko.

0
Łukasz napisał(a)
    while(ek!=begin)
    {
                    
                    cout << "Wiek ucznia o indeksie " << i+1 << " wynosi: " ;
                    cout << ek->wiek << endl;
                    ek=ek->next;
                    i++;
    }

ostatni element nie jest nullowany? Sprawdź warunek pętli.

0

Hmm wiem tylko że warunek jest chyba nie taki jaki powinien być...

cout << "..::Wyswietlanie::.." << endl;
    osoba *r; // r ma teraz wartosc pierwszej danej na liscie??
    while(r!=NULL)
    {
                    
                    cout << "Wiek ucznia o indeksie " << i+1 << " wynosi: " ;
                    cout << r->wiek << endl;
                    r=r->next;
    }
         

mam takie coś ale pokazuje mi tylko ostatnia liczbę zapisana na liście a chciałem aby od pierwszych podanych liczb mi wyświetlało

0

Pomoże ktoś

0
 cout << "..::Wyswietlanie::.." << endl;
    osoba *ek=begin;
    while(ek==begin)
    {
                    
                    cout << "Wiek ucznia o indeksie " << i+1 << " wynosi: " ;
                    cout << ek->wiek << endl;
                    ek=ek->next;
                    i++;
    }

Sprawdź to.
Metoda prób i błędów :D

0

nie widzicie, że ten kod jest źle napisany? Co znajduje się w "begin->next" skoro nigdzie tego nie przypisuje? Poza dupnym wyciekiem nic w tym źródle się nie dzieje!

0
for(int i=0;i<n;i++)
    {
        osoba *elem=new osoba;
        cout << "Podaj wiek " << i+1 << " ucznia : " ;
        cin >> year;
        elem->wiek=year;
        elem->next=NULL;

        if(!begin)
            begin = elem;
        else
        {
            osoba *tmp = begin;
            while(tmp->next)
                tmp = tmp->next;
            tmp->next = elem;
        }
    }
    cout << "..::Wyswietlanie::.." << endl;
    osoba *ek=begin;
    while(ek)
    {
        osoba *del = ek;
        cout << "Wiek ucznia o indeksie " << i+1 << " wynosi: " ;
        cout << ek->wiek << endl;
        ek=ek->next;
        delete del;
        i++;
    }

i przemyśl to.

1 użytkowników online, w tym zalogowanych: 0, gości: 1