Rozdział 17 - pierwsze zadanie domowe
Ostatnio zmodyfikowano 2016-07-21 21:09
Norbix Temat założony przez niniejszego użytkownika |
» 2016-07-21 19:00:02 Dlatego że nie jestem w stanie zrozumieć sposobu zabezpieczenia programu przez użytkownika carlosmay, postanowiłem wczytać się w poprzedni rozdział gdzie znalazłem sposób na zabezpieczenie programu przed wpisaniem litery. #include <iostream>
using namespace std;
int wczytajLiczbe() { int liczba; cin >> liczba; if( cin.fail() ) { cout << "Podales niewlasciwa liczbe." << endl; } return liczba; }
int main() { while( true ) { std::cout << "Podaj liczbe: "; int liczba = wczytajLiczbe(); std::cout << "Podales liczbe: " << liczba << std::endl; } return 0; } Działanie programu będzie wyglądać następująco: Podaj liczbe: a Podales niewlasciwa liczbe. Podales liczbe: 0 Jak poprawnie napisać funkcję aby po złym wczytaniu nie została zwrócona wartość 0? Wiem, że kompilator czyta linijki z góry do dołu. Po dalszym namyśle, zacząłem kombinować na różne sposoby, na przykład na ten: int wczytajLiczbe() { int liczba; cin >> liczba; if( cin.good() ) { cout << liczba << endl; } else if( cin.fail() ) { cout << "Podales niewlasciwa liczbe." << endl; } } Lecz w tym sposobie nawet jak podam liczbę, to program wyda mi jako liczbę 4757824. Chciałem również aby program się powtarzał, więc w funkcji main wprowadziłem pętle while, która nie wiem z jakiego powodu po prostu się nie wykonuję. (Program po jednorazowym użyciu się kończy) |
|
Szymon2727 |
» 2016-07-21 21:09:43 Bo std::cin.fail() działa tak samo jak std::cin.good(), ponieważ są to funkcje bool - zwrócą Ci jedynie true albo false, a to już zależy od tego co podałeś w strumieniu. To co podał carlos jest przykładem z owego działu, który omawia tę funkcję, jednak z takim haczykiem, że zadziała to również na linuksie ;) |
|
1 « 2 » |