Rozdział 26 Glitch przy sprawdzaniu strumienia.
Ostatnio zmodyfikowano 2018-03-27 19:43
Aramil Temat założony przez niniejszego użytkownika |
Rozdział 26 Glitch przy sprawdzaniu strumienia. » 2018-03-27 19:15:43 Witam! Mam problem z tym oto fragmentem kodu: cin >> wiek; if( cin.fail() ) { do { cout << "Blad! Podaj liczbe!"; cin.sync(); cin.clear(); } while( cin >> wiek && cin.good() == false );
If oraz pętla mają sprawdzać czy użytkownik nie wpisał błędnego znaku. Problem w tym że program albo wyskakuje z pętli po wpisaniu błędnej danej albo glitchuje się i wypisuje w nieskończoność komunikat "Blad! Podaj liczbe!" |
|
pekfos |
» 2018-03-27 19:24:14 Po pierwsze, najpierw clear(), potem sync(). Po drugie, nie sync(), tylko ignore(). Po trzecie, twój warunek pętli nie ma większego sensu. |
|
Aramil Temat założony przez niniejszego użytkownika |
» 2018-03-27 19:34:59 Dobra wprowadziłem poprawki i faktycznie zaskoczyło. Dzięki za pomoc. if( cin.fail() ) { do { cout << "Blad! Podaj liczbe!"; cin.clear(); cin.ignore(); cin >> wiek; } while( cin.fail() == false ); }
Teraz tylko prosił bym o krótkie wytłumaczenie dlaczego. O ile kolejność clear() i sync() rozumiem. Najpierw czyszczę flagę później bufor. Całkiem logiczne... O tyle dlaczego użycie sync() jest błędem? Co do trzeciego to czułem że nie ma wielkiego sensu ale nie byłem pewien w czym leży problem... |
|
pekfos |
» 2018-03-27 19:41:23 tyle dlaczego użycie sync() jest błędem? | Obsługa strumienia wejściowegoJak ktoś znajdzie czas na przepisanie tej lekcji, sync() będzie tylko wspomniane że istnieje (i nie należy go używać). Na razie jest tylko dopisana czerwona ramka. |
|
Aramil Temat założony przez niniejszego użytkownika |
» 2018-03-27 19:43:37 Dobra, teraz wydaje się to całkiem jasne. Dzięki za pomoc, zamykam temat. |
|
« 1 » |