Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] kolejność cin.clear(), cin.sync(), a zapętlanie się programu

Ostatnio zmodyfikowano 2016-11-07 23:58
Autor Wiadomość
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
C/C++
while( cin.good() == false )
{
    cin.clear(); cin.sync();
    cout << "Podaj wiek:";
    cin >> wiek;
}
działa prawidłowo, a
C/C++
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ć?


P-153470
carlosmay
» 2016-11-07 23:58:55
cin.sync(); cin.clear();
» Kurs C++ » Poziom 1Obsługa strumienia wejściowego lekcja

Metoda 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.
P-153472
« 1 »
  Strona 1 z 1