Problem z dynamiczną strukturą tablicową


(Sebastianp88) #1

Witam wszystkich

Mam problem z programowaniem w C++. Otóż po kompilacji program po podaniu liczby przechodzi automatycznie do miejsca w którym trzeba podać rok, pomijając podanie marki samochodu.

O to kod

#include 

using namespace std;


struct car

{

    string marka;

    int rok;

};


int main()

{

    cout << "Ile samochodow chcesz skatalogowac? ";

    unsigned short liczba;

    cin >> liczba;


    car *tab = new car[liczba];


    for (int i = 0; i < liczba; i++)

    {

        cout << "Samochod: #" << i << endl;

        cout << "Prosze podac marke: ";

        getline(cin, tab[i].marka);

        cout << "Rok produkcji: ";

        cin >> tab[i].rok;

    }


    for(int i = 0; i < liczba; i++)

        cout << tab[i].marka;


    return 0;

}

Gdzie jest błąd? Bardzo proszę o wyjaśnienie.


(Fiołek) #2

Wyczyść strumień przed pobieraniem. Po pobraniu ze strumienia cin czegoś operatorem ">>" w strumieniu zostają białe znaki(i wszystko co znajduje się po pierwszym białym znaku), dlatego tak się dzieje.


(system) #3

tak jak już mówił fiołek, musisz wyczyścić strumień, ponieważ korzystasz i z cin i z getline (tłumaczę to na swój sposób xD). Gdybyś korzystał tylko np z cin lub tylko z getline, tego problmeu by nie było. A w takim przypadku wystarczy :

cout << "Prosze podac marke: ";

// tutaj cin.ignore()

        getline(cin, tab[i].marka);

dodać pomiędzy tymi linijkami cin.ignore() - ignorującą wszystkie znaki w strumieniu funkcję...


(Sebastianp88) #4

osobiście użyłem cin.get() i problem zniknął. Dziękuję za pomoc.


(system) #5

Radze jednak użyć cin.ignore() po wprowadzeniu roku. Twoje rozwiązanie z cin.get() działa dziwnie. :lol: Spróbuj zamiast roku wpisać: "1990 " czyli ze spacją po roku, lub "1993 ala ma kota". :stuck_out_tongue: