[C++] kolejność cin.clear(), cin.sync(), a zapętlanie się programu
Ostatnio zmodyfikowano 2016-11-07 23:58
Chlebo Temat założony przez niniejszego użytkownika |
[C++] kolejność cin.clear(), cin.sync(), a zapętlanie się programu » 2016-11-07 23:22:35 W lekcji 26 natrafiłem na "Zadbaj o bezpieczeństwo wprowadzonych danych, tj. w przypadku błędnego wieku (np. wprowadzonego tekstu) program ma ponawiać żądanie aż do skutku. " Chciałbym wiedzieć dlaczego while( cin.good() == false ) { cin.clear(); cin.sync(); cout << "Podaj wiek:"; cin >> wiek; } działa prawidłowo, a while( cin.good() == false ) { cin.sync(); cin.clear(); cout << "Podaj wiek:"; cin >> wiek; } powoduje zapętlenie się programu. Co powoduje, że drugi wariant zapętla program i trzeba go siłowo zamykać? |
|
carlosmay |
» 2016-11-07 23:58:55 Obsługa strumienia wejściowegoMetoda clear() resetuje flagi strumienia wejściowego. Jeśli wczytanie zakończy się niepowodzeniem, strumień jest zablokowany póki nie zresetuje się flag. Metoda sync() opróżnia bufor strumienia z pozostałości, ale nie potrafi działać na zablokowanym strumieniu, tak więc wpierw należy odblokować (wyzerować flagi) strumień. Metoda sync() nie wszędzie działa w ten sposób, bo jest to jej efekt uboczny. Lepiej poznać działanie metody ignore(). Jest opisana w linku z kursu. |
|
« 1 » |