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;
}
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.
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 :
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”.