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

Strumień wejściowy - Problem

Ostatnio zmodyfikowano 2014-07-06 15:19
Autor Wiadomość
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.
P-113356
pekfos
» 2014-07-05 23:18:17
Czego konkretnie nie rozumiesz? Masz w kursie przykłady stosowania wymienionych metod..
P-113359
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.
P-113360
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 class
2.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?
P-113362
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++.
P-113384
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ąć ;)
P-113387
« 1 »
  Strona 1 z 1