Kontrola strumienia wejściowego
Ostatnio zmodyfikowano 2017-11-20 23:36
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 |
|
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() |
|
pekfos |
» 2017-11-20 22:53:03 ignore nie jest dokładnym zamiennikiem. Nie czyść strumienia bez powodu. |
|
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? :) |
|
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. |
|
sair Temat założony przez niniejszego użytkownika |
» 2017-11-20 23:06:32 coś takiego? do { cin >> napis; if( cin.fail() ) { cin.clear(); cin.ignore(); } } while( cin.fail() ); |
|
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 std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
Poza tym jak wyczyścisz flagi błędów, to cin.fail zwróci false. |
|
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ć :/ |
|
1 « 2 » |