Zastosowanie cin.get(); bez parametru w kodzie.
Ostatnio zmodyfikowano 2015-01-16 22:38
Rigid Temat założony przez niniejszego użytkownika |
Zastosowanie cin.get(); bez parametru w kodzie. » 2015-01-15 14:47:38 Witam Nie jestem pewien czy dobrze zatytuowałem ten post ale już przechodze do rzeczy. Mam problem ze zrozumieniem pewnego fragmentu kodu: double i;
while( !( cin >> i ) ) { cout << "Blad! Podaj liczbe"; cin.clear(); cin.get(); } return 0;
Wiem ze: - pętla wykona się gdy wczytam inny znak niż liczba - po wczytaniu błędnego znaku muszę użyć cin.clear() aby wyzerować strumień wejsciowy - pętla zakończy się po podaniu liczby nie wiem natomiast dlaczego przy braku cin.get(); pętla wykonuje się bez przerwy, automatycznie. [zapętla się] Więc moje pytania brzmią: 1) co takiego robi tu cin.get(); 2) jakie są zastosowanie cin.get(); [bez parametru] [do tej pory używałem tego tylko do 'oczekiwania' na wciśnięcie jakiegoś klawisza] |
|
1aam2am1 |
» 2015-01-15 15:15:04 cin.get(); //czyta pojedynczy charakter z bufora. Nie zadziała to dobrze jeżeli w buforze ezie więcej niż jeden znak niepoprawny. Np wpiszesz "abc" i cin.get() pobierze ci tylko "a", "bc" pozostaną w buforze. Zamiast tego powinieneś zastosować cin.sync(); |
|
Monika90 |
» 2015-01-15 15:26:07 Nie używaj cin.sync() ponieważ nie wiadomo co cin.sync() robi.
Sposób przywracania strumienia do oczekiwanego stanu zależy od konkretnej sytuacji, prosta metoda, która się często sprawdzi przy wpisywaniu danych z klawiatury, wygląda tak
cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n');
wymaga to #include <limits> |
|
Nitr0Skay |
» 2015-01-15 21:00:10 @Monika http://www.cplusplus.com/reference/istream/istream/sync/ |
|
pekfos |
» 2015-01-16 16:25:35 @Monika http://www.cplusplus.com/reference/istream/istream/sync/ |
No i co? Chodzi o to, że ta metoda dla cin nie musi nic robić - i tak jest np pod Linuksem. |
|
Nitr0Skay |
» 2015-01-16 22:38:55 Zatem pa licho ona istnieje ?? |
|
« 1 » |