Problem je v tom, ze getline() nechvava vo vstupnom buffri znak noveho riadku, ktory stlacis pre potvrdenie toho, co napises. A tento znak sa potom precita v dalsom cin. Nieco podobne sa riesilo tu ->
http://www.pcforum.sk/nefungujuci-fgets-vt127550.html <- akurat to je v C-cku, ide ale o podobny problem.
Pouzi miesto funkcie getline() iba funkciu
get(), kde si mozes vsimnut tuto vetu:
Citácia:
If the delimiting character is found, it is not extracted from the input sequence and remains as the next character to be extracted. Use getline if you want this character to be extracted (and discarded).
Dalej, ak pouzivas pretazeny operator
>> , tu budes zrejme musiet volat cin.get() aby sa precital tento znak. Da sa to riesit aj pomocou manipulatorov, ale to je na zaciatok asi prilis vela. Ries to zatial takto, urcite bude v knizke dalej vysvetlene, ako tomu predist.
Kód:
#include<iostream>
using namespace std;
struct cars
{
char mark[20];
int year;
};
int main()
{
int n, i;
cout<<"zadaj pocet aut, ktore chces ulozit do zoznamu >>";
cin >> n;
cin.get(); // * PRIDANE *
cars *info=new cars[n];
for( i=0 ; i<n ; i++ )
{
cout<<"car # "<<i+1;
cout<<"zadaj znacku auta >>";
cin.get(info[i].mark,20); // * PRIDANE *
cout<<info[i].mark;
cout<<"zadaj rok vyroby >>";
cin >> info[i].year;
cin.get(); // * PRIDANE *
cout<<'\n';
}
delete [] info;
return 0;
}