Cześć,
Chcę wczytać wartość z klawiatury. Gdy używam cin.sync() wszystko działa poprawnie, ale wiem że tylko na windowsie sync() działa, natomiast gdy próbuję użyć cin.ignore() to muszę przy pierwszym podaniu wartości z klawiatury użyć entera.
Przykładowo gdy podaję "3" i naciskam enter to nic się nie dzieje, dopiero po ponownym podaniu wartości i wciśnięciu entera program reaguje.
A jak zamiast cin>>x, użyję getline(cin,x); to wyskakuje błąd: error: no matching function for call to 'getline(std::istream&, int&)'.
Kod:
cout<<"Zapisac?\n[1]Tak\n[2]Nie\n";
int zapis;
zapis=f_poprawne(0);
int f_poprawne(int x){
bool stan_x;
do{
cin.clear();
//cin.sync();
cin.ignore(); // <-- TUTAJ
cin>>x; // getline(cin,x);
stan_x=cin.good();
if(stan_x==0)
cout<<"Wprowadzono zle dane! Podaj ponownie:\n";
else if(x<1||x>2)
cout<<"Wybrano z poza zakresu! Podaj ponownie:\n";
}while(stan_x==0||x<1||x>2);
return x;
}
Zawsze stosowałem cin.sync() ale dostałem informację bym zaczął używać ignore().
Przeszukałem internet, poczytałem o tej funkcji i zauważyłem, że czasami przyjmuje ona wartości w nawiasie: cin.ignore(1000,'\n');.
Nie będę ukrywać, że nie rozumiem o co w ignore() chodzi. Podobnie z getline, niby miał zapisywać łańcuch znaków, ale.. jest błąd. Czy on działa tylko na string, a na innych zmiennych nie?
Mógłby ktoś w łopatologiczny sposób wytłumaczyć jak tych funkcji używać i jak pominąć ten enter w programie?
Pozdrawiam,
Hinzeq.