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

Kontrola strumienia wejściowego

Ostatnio zmodyfikowano 2017-11-20 23:36
Autor Wiadomość
Luq
» 2017-11-20 22:48:17
std::cin.sync nie służy do czyszczenia strumienia. Może się zdarzyć, że wyczyści strumień, ale jest to zależne od implementacji (a w VS tego nie robi). Zamiast tego użyj std::cin.ignore
P-167033
sair
Temat założony przez niniejszego użytkownika
» 2017-11-20 22:49:30
Teraz działa, ale nie wiem dlaczego ucina pierwszy znak ze stringa, natomiast INT'a nie rusza.

użyłem cin.ignore()
P-167034
pekfos
» 2017-11-20 22:53:03
ignore nie jest dokładnym zamiennikiem. Nie czyść strumienia bez powodu.
P-167035
sair
Temat założony przez niniejszego użytkownika
» 2017-11-20 22:56:04
A więc w takim razie co zrobić aby programik dzialał prawidłowo? :)
P-167036
Luq
» 2017-11-20 23:01:23
Czyść strumień w przypadku, gdy wczytanie się nie powiedzie. Jak strumień jest pusty, to ignore będzie czekał, aż coś wpiszesz.
P-167037
sair
Temat założony przez niniejszego użytkownika
» 2017-11-20 23:06:32
coś takiego?

C/C++
do {
    cin >> napis;
   
    if( cin.fail() ) {
        cin.clear();
        cin.ignore();
    }
   
   
} while( cin.fail() );
P-167038
Luq
» 2017-11-20 23:18:02
ignore wywołane bez argumentów zignoruje tylko pierwszy znak w strumieniu. Standardowo pisze się coś w tym stylu
C/C++
std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); // dodaj #include<limits>

Poza tym jak wyczyścisz flagi błędów, to cin.fail zwróci false.
P-167039
sair
Temat założony przez niniejszego użytkownika
» 2017-11-20 23:36:22
Powiem szczerze, że nie przychodzi mi żaden pomysł jak to rozwiązać :/
P-167040
1 « 2 »
Poprzednia strona Strona 2 z 2