Rozdzial 15. Praca domowa, zadanie 2 i 3
Ostatnio zmodyfikowano 2017-04-23 22:34
trb Temat założony przez niniejszego użytkownika |
Rozdzial 15. Praca domowa, zadanie 2 i 3 » 2017-04-23 21:22:27 Witam, jestem początkujący i mam problem z praca domowa. Wydaje mi się, że rozwiązanie jest napisane poprawnie (tj. spełnia warunki postawione w poleceniu) ale gdy zmienna symbolizująca wybór działania jest typu int i kiedy wybór jest z zakresu 1-5, kiedy zmieniam typ zmiennej na char to po wpisaniu wyboru (nawet jeżeli jest prawidłowy) kończy działanie programu i czeka na wciśniecie dowolnego klawisza. Kiedy podam wartość działania z poza zakresu 1-5 w przypadku kiedy zmienna wyboru działania jest typu int program zwraca to co jest po instrukcji default. Co robię źle? #include <iostream> int main() { float liczba1, liczba2; std::cout << "wprowadz pierwsza liczbe na ktorej chcesz przeprowadzic dzialanie: " << std::endl; std::cin >> liczba1; if( std::cin.fail() ) { do { std::cout << "pierwsza liczba jest niepoprawna, sproboj cos innego " << std::endl; std::cin.clear(); std::cin.sync(); std::cin >> liczba1; } while( std::cin.fail() ); } std::cout << "podaj druga liczbe, na ktorej chcesz przeprowadzic dzialanie" << std::endl; std::cin >> liczba2; if( std::cin.fail() ) { do { std::cout << "druga liczba jest niepoprawna, sproboj cos innego " << std::endl; std::cin.clear(); std::cin.sync(); std::cin >> liczba2; } while( std::cin.fail() ); } if( liczba2 != 0 ) { std::cout << "Wybierz rodzaj dzialania: " << std::endl; std::cout << "[1] Dodawanie" << std::endl; std::cout << "[2] Odejmowanie" << std::endl; std::cout << "[3] Mnozenie" << std::endl; std::cout << "[4] Dzielenie" << std::endl; std::cout << "[5] Rezygnuj" << std::endl; int dzialanie; std::cin >> dzialanie; if( std::cin.fail() ) { do { std::cout << "niepoprawny wybor dzialania, sproboj ponownie " << std::endl; std::cin.clear(); std::cin.sync(); std::cin >> dzialanie; } while( std::cin.fail() || dzialanie <= 0 || dzialanie > 5 ); } switch( dzialanie ) { case 1: std::cout << "wynik dodawania to " << liczba1 + liczba2 << std::endl; break; case 2: std::cout << "wynik odejmowania to " << liczba1 - liczba2 << std::endl; break; case 3: std::cout << "wynik mnozenia to " << liczba1 * liczba2 << std::endl; break; case 4: std::cout << "wynik dzielenia to " << liczba1 / liczba2 << std::endl; break; case 5: std::cout << "rezygnujesz" << std::endl; break; default: std::cout << "cos poszlo nie tak" << std::endl; } } else std::cout << "podales 0 jako druga liczbe, tak nie mozna" << std::endl; return 0; }
|
|
pekfos |
» 2017-04-23 21:23:55 1 wczytane jako char jest spoza zakresu. Znak '1' ma wartość liczbową 49. |
|
trb Temat założony przez niniejszego użytkownika |
» 2017-04-23 21:29:59 Dzieki za szybką odpowiedź, czyli mam zrezygnować z używania typu char? Jak poradzić sobie z wymuszeniem wartości zmiennej dzialanie żeby użytkownik musuial wprowadzić coś z zakresu 1-5?
Edit:
Chyba sobie poradziłem, dopisałem cin.clear() i cin.sync() przed pierwszym wczytaniem zmiennej dzialanie i jak na razie działa :)
Edit2:
Jednak nie do końca, nic nie zmieniałem w kodzie a kiedy wpisuje jako dzialanie coś spoza zakresu 1-5, program zwraca to co jest po default |
|
pekfos |
» 2017-04-23 22:34:53 Jednak nie do końca, nic nie zmieniałem w kodzie a kiedy wpisuje jako dzialanie coś spoza zakresu 1-5, program zwraca to co jest po default |
Bo nie sprawdzasz tego za pierwszym razem. czyli mam zrezygnować z używania typu char? |
Wystarczy pamiętać, że '0' to nie 0. |
|
« 1 » |