Strona główna forum Kategoria forum
see_you_in_hell 2012-02-10 22:59
  • 2012-02-10 22:50
  • 2012-05-12 21:14
  • 11
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ć ?
Głosuj na ten post 0 Głosuj na ten post
Raportuj Cytuj
4 odpowiedzi
Endrju 2012-02-10 23:10
  • 2003-02-27 18:34
  • 45 sekund temu
nazwisko = new char; to jest 1 (słownie: jeden) char. Chyba chciałeś więcej? Polecam zainteresować się std::string.

Straight Edge till death.
Głosuj na ten post 1 Głosuj na ten post
Raportuj Cytuj
artur_waw 2012-02-10 23:14
  • 2006-08-28 20:19
  • wczoraj, 20:31
  • 55
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ł :)
Edytowany 1 raz: 2012-02-10 23:15 przez artur_waw
Głosuj na ten post 1 Głosuj na ten post
Raportuj Cytuj
see_you_in_hell 2012-02-10 23:21
  • 2012-02-10 22:50
  • 2012-05-12 21:14
  • 11
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!
Głosuj na ten post 0 Głosuj na ten post
Raportuj Cytuj
Shalom 2012-02-10 23:51
  • 2004-01-30 21:49
  • 1 godz. temu
  • 4,643
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.

Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na pw/gg przyjmuje tylko zlecenia. Masz problem? Pisz na forum, nie do mnie]
Głosuj na ten post 0 Głosuj na ten post
Raportuj Cytuj
atom

Ilość odpowiedzi na stronę

1 użytkownik(ów) przegląda ten temat (1 gości)

4programmers.net