• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kolejność wywoływania cin.clear() i cin.ignore() ( nie mam programu do dekompilowania)

Object Storage Arubacloud
0 głosów
712 wizyt
pytanie zadane 12 listopada 2017 w C i C++ przez Szahid Pasjonat (20,930 p.)

Witam. Zastanawia mnie dlaczego żeby "naprawić" obiekt cin po nieprawidłowym wczytaniu danych muszę wywołać wyżej wymienione metody w takiej a nie innej kolejności. 

cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');

Na moją logikę kolejność  czyszczenie bufora i resetu flag błędów nie powinna mieć znaczenia. Czy mógłby mi ktoś to wytłumaczyć ? Ewentualnie wrzucić screena z dekompilacji tego żebyśmy wspólnie zobaczyli co się dzieje :)

 

Dodam jeszcze że jeśli wywoła się je odwrotnie to flagi błędu nie są czyszczone 

1 odpowiedź

+1 głos
odpowiedź 12 listopada 2017 przez the_danger Gaduła (4,800 p.)
wybrane 13 listopada 2017 przez Szahid
 
Najlepsza

http://en.cppreference.com/w/cpp/io/basic_istream/ignore

ignore behaves as an UnformattedInputFunction. After constructing and checking the sentry object, it extracts characters from the stream and discards them until any one of the following conditions occurs

http://en.cppreference.com/w/cpp/concept/UnformattedInputFunction

An UnformattedInputFunction is a stream input function that performs the following:

  • Constructs an object of type basic_istream::sentry with automatic storage duration and with the noskipws argument set to true, which performs the following
    • if eofbit or badbit are set on the input stream, sets the failbit as well, and if exceptions on failbit are enabled in this input stream's exception mask, throws ios_base::failure.
komentarz 12 listopada 2017 przez Szahid Pasjonat (20,930 p.)
Nie do końca rozumiem jak ma się to do mojego pytania. Może to przez to że nie wiem o co chodzi w tym podpunkcie

Constructs an object of type basic_istream::sentry with automatic storage duration and with the noskipws argument set to true, which performs the following

Funkcja ignore tworzy jakiś obiekt o jakimś argumencie ustawionym na true? Nie bardzo rozumiem
1
komentarz 12 listopada 2017 przez Michał Muzyka Pasjonat (24,080 p.)
chodzi chyba o to że jeśli jest ustawiona jakaś flaga błędu, to funkcja ignore() zostawia te błędy i wyrzuci wyjątek, dlatego musisz najpierw wyczyścić strumień i później dać ignore() który pominie cały strumień do następnego końca linii

Podobne pytania

0 głosów
1 odpowiedź 7,535 wizyt
pytanie zadane 16 grudnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
2 odpowiedzi 2,325 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez patryk123 Nowicjusz (170 p.)
+1 głos
2 odpowiedzi 1,553 wizyt
pytanie zadane 7 października 2018 w C i C++ przez Hinzeq Użytkownik (860 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...