Dodawanie studentow do listy

0

Witam, napisalem sobie liste dwukierunkową, ktora działa poprawnie, jednak chce aby to uzytkownik podawał w konsoli dane studentów... I z tym wlasnie mam problem, o to fragment kodu, którego nie rozumiem działania ;)

int main(void)
{
    int ile=0;
    cout << "Ilu studentow chcesz dodac do listy ? ";
    cin >> ile;
    cout <<endl;
    char* imie;
    char* nazwisko;
    char* nr;
    for(int i=0; i<ile; i++)
    {
        imie = new char;
        cout <<"Podaj imie studenta : ";
        cin >>imie;
        cout <<endl;
        nazwisko = new char;
        cout <<"Podaj nazwisko studenta : ";
        cin >>nazwisko;
        cout <<endl;
        nr = new char;
        cout <<"Podaj nr indeksu studenta : ";
        cin >>nr;
        cout <<endl;
    }
} 

A kodu nie rozumiem dlatego, że jeżeli podaje byle ktora daną, czy to imie czy nr czy nazwisko i jezeli ilosc znakow jest wieksza niz 8 to program nie dziala poprawnie, jezeli daje daną ktora ma 7 liter badz mniej, dziala poprawnie. Zaznaczam ze pierwsze podane imie moze miec dowolną ilosc znaków, ale juz kolejne dane, które podaje użytkownik, nie mogą przekraczac 7 liter. Może ktoś mi to wytłumaczyć ?

1

nazwisko = new char; to jest 1 (słownie: jeden) char. Chyba chciałeś więcej? Polecam zainteresować się std::string.

1

Nie jestem specem od CPP ale czy:

 
new char

Nie alokuje pamięci tylko pod jednego chara? Co za tym idzie piszesz na farcie po niezaalokowanej pamięci?

Edit:
Tak długo to pisałem, że kolega wyżej mnie uprzedził :)

0

Dziękuje bardzo za odpowiedzi :) Rozumiem ze alokuje pamięc tylko na jeden char. Ale nie rozumiałem dlaczego jak wpisze do nazwiska np."kowal", to do mojej listy zapisze sie cały wyraz :)

"piszesz na farcie po niezaalokowanej pamięci" - Dzięki temu rozumiem, dlaczego to w ogóle zadziałało dla niedługich wyrazów :)

Dziękuje jeszcze raz i Pozdrawiam!

0

@see_you_in_hell C++ nie przejmuje się sprawdzaniem zakresów tablic, a tablice dynamiczne są w zasadzie wskaźnikami więc można je przesuwać tak daleko jak się chce. W efekcie błąd segmentation fault pojawi się zwykle dopiero jeśli zbyt daleko się wysuniesz i system operacyjny zauważy że cos jest nie tak.

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