zabezpieczenie programu przed wprowadzeniem złych danych
Ostatnio zmodyfikowano 2016-01-10 10:10
sebek0990 Temat założony przez niniejszego użytkownika |
zabezpieczenie programu przed wprowadzeniem złych danych » 2016-01-09 07:21:12 Witam. Wiem że takich tematów jest dużo ale mój jest wyjątkowy. Programuję po linuxem. Wiem jak zabezpieczyć program przed wpisaniem znaku do integera jednak pod linuxem mi to nie działa. dla przykładu mam taki kod
int i; while(!(cin>>i)) { cin.clear(); cin.sync(); }; cout << "done";
nie działa on tak jak trzeba ponieważ po wpisaniu najpierw znaku a potem liczby, program nie wychodzi z pętli. inny przykład
int main() { int i; cin >> i; while(cin.fail()) { cout << "error"; cin >> i; } }
to z kolei wyświetla napis error w nieskonczoność. podobnie z ifami (np. if(cin.fail()){cout << "error"; cin >> i;} nie wiem co jest nie tak. Jest jakiś sposób żeby użyskać jakieś bardziej szczegółowe informacje od kompilatora/debuggera dlaczego nie chce wyjść z pętli? pozdrawiam. |
|
carlosmay |
» 2016-01-09 10:13:28 W drugim przekładzie też trzeba czyścić strumień. Po błędnych danych strumień wejściowy jest wstanie błędu i nie pozwoli nic wczytać póki nie będzie skasowana flaga błędu. |
|
mateczek |
» 2016-01-09 10:15:38 |
|
sebek0990 Temat założony przez niniejszego użytkownika |
» 2016-01-10 07:01:10 @carlosmay dzięki działa, ale do pierwszzego przykładu. pozdrawiam cieplutko. |
|
carlosmay |
» 2016-01-10 10:10:02 W drugim jest podobnie. cin.fail() wyłapuje błąd. Zaraz po wejściu w pętlę stosujesz cin.clear(); cin.ignore() Następnie ponownie pobierasz od użytkownika dane.
Jeśli ten sposób nie zadziała sugeruję uważnie przeczytać temat z linka podanego wcześniej. |
|
« 1 » |