Daedra Temat założony przez niniejszego użytkownika |
Strumień wejściowy - Problem » 2014-07-05 23:08:29 Gnębi mnie strasznie jeden fakt, a dokładnie czyszczenie strumienia wejściowego, gdy podaję znaki alfabetyczne zamiast liczb program wyświetla losowe wartości, jak mogę sprawić aby przy wprowadzaniu błędnych znaków/liter do zmiennej w programie, nie wyświetlały się te losowe wartości? Służyło do tego cin.clear, cin.sync, cin.ignore, lecz po przeczytaniu działu związanego z obsługą strumienia wyjściowego i przejrzeniu internetu na ten temat nadal nie rozumiem jak je stosować w kodzie, ktoś mi może przybliżyć dokładniejsze ich zastosowanie i znaczenie? Chodzi najbardziej o to że nie wiem jak je wdrążyć do kodu tak aby działały należycie. |
|
pekfos |
» 2014-07-05 23:18:17 Czego konkretnie nie rozumiesz? Masz w kursie przykłady stosowania wymienionych metod.. |
|
Daedra Temat założony przez niniejszego użytkownika |
» 2014-07-05 23:49:37 Może nie tyle co nie rozumiem, co powinienem zrobić jeśli nie chcę aby program wyświetlał losowe wartości liczbowe w przypadku podania np. litery dla strumienia wejściowego?
Edit: Rozwiązaniem mojego problemu były te dwie linijki:
cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' );
Cholera, wychodzi na to że moje czytanie ze zrozumieniem leży kompletnie... Obecnie moja wiedza na ten temat sprowadza się do tego że coś takiego istnieje i jest rozwiązaniem między innymi dla problemu jaki napotkałem, lecz chciałbym przyjrzeć się temu bliżej i zgłębić bardziej znaczenie poszczególnych kodów, aby było łatwiej rozpoznać się wam było w bałaganie jaki rozpętałem podam moje sprecyzowane pytania w punktach...
1. "...std::cin.clear() czyści flagi błędu..." Ktoś może bardziej przybliżyć mi za co odpowiada? Problem jest taki że nie wiem czym dokładnie są flagi błędu. 2. "...std::cin.sync() która czyści bufor strumienia..." Kolejne pojęcie które wolałbym poznać bliżej dla rozwiania jakichkolwiek wątpliwości, a jest nim bufor strumienia. |
|
Jacob99 |
» 2014-07-06 07:41:33 1.Flagi błędu strumienia to obiekty typu fmtflags. A ogólniej są to stany strumienia, które odczytujesz za pomocą funkcji składowych good(), fail(), bad(), eof(). istream class2.Bufor to fragment pamięci, w którym przechowywane są bieżące dane(np. do wysłania na ekran strumieniem cout) w iostream są trzy(lub sześć, uwzględniając wcout, wcin i wclog) standardowe strumienie, które są buforowane. Objawia się to tym, że np. strumień cout "czeka", aż zbierze się większa ilość znaków i dopiero wtedy je wypisuje. Jest to robione w celu optymalizacji operacji we/wy, bo zamiast wysyłać na ekran każdy kawałek danych jaki mu damy, to czeka i wysyła za jednym razem wszystko, co jest w jego buforze. What is a buffer? |
|
pekfos |
» 2014-07-06 14:04:11 1.Flagi błędu strumienia to obiekty typu fmtflags. |
Co..?! co powinienem zrobić jeśli nie chcę aby program wyświetlał losowe wartości liczbowe w przypadku podania np. litery dla strumienia wejściowego? |
Inicjalizować zmienne. Lub włączyć wsparcie nowego C++. |
|
Daedra Temat założony przez niniejszego użytkownika |
» 2014-07-06 15:19:07 Dzięki za pomoc, teraz łatwiej mi to wszystko poukładać w głowie, temat można zamknąć ;) |
|
« 1 » |