Problem z "cin.ignore()"
Ostatnio zmodyfikowano 2011-03-23 00:35
freoone Temat założony przez niniejszego użytkownika |
» 2011-03-22 20:09:42 Na razie z wprowadzeniem rozmiaru tablicy dam sobie spokój. Chciałem tylko wiedzieć czy istnieje sposób pozbycia się tego entera. Na razie jedyne co wymyśliłem, to zmienienie funkcji "wybor2" w ten sposób: int wybor2() { int a; do { while( std::cin >> a ) { return a; } std::cin.ignore( 1000, '\n' ); std::cin.clear(); myGetch(); } while( 1 ); }
Ma to swoją wadę, mianowicie jeżeli chciałbym dodać komunikat błędu, wyświetlił by się on wiele razy (w zależności od ilości wprowadzonych znaków). Ale na razie jest to chyba najlepsze rozwiązanie. Poza tym wpisując np. "2sfafja1", utworzy się tablica o rozmiarze 2 i od razu pierwszemu elementowi zostanie nadana wartość 1. //Dodane Zmieniłem funkcję "wybor2". int wybor2() { int a = 0; do { while( std::cin >> a ) { std::cin.clear(); std::cin.ignore( 1000, '\n' ); return a; } std::cin.clear(); std::cin.ignore( 1000, '\n' ); std::cout << "Błąd. Wprowadzone błędne dane." << std::endl; } while( 1 ); }
Teraz program działa tak jak chciałem na początku. Gdy zostają wprowadzone błędne znaki, program ignoruje je. Gdy na początku wprowadzona jest liczba, a później jakieś znaki np. "3sfdaf3", program odczyta tylko pierwszą trójkę. Dziękuję wszystkim za pomoc. |
|
DejaVu |
» 2011-03-23 00:35:35 |
|
1 2 « 3 » |