Zadanie 2 z rozdziału 15 (kalkulator) problem z pętlą
Ostatnio zmodyfikowano 2022-06-10 06:55
piratek Temat założony przez niniejszego użytkownika |
Zadanie 2 z rozdziału 15 (kalkulator) problem z pętlą » 2022-06-08 12:29:10 Jestem w trakcie kodowania kalkulatora i natknąłem się na problem, który nie do końca wiem z tego co wynika. Problem pojawia się gdy wpisuje 0 w tym miejscu: cin >> liczbaA; . Kod ignoruje if( liczbaA != 0 ) , ale zamiast pętla wrócić do tego miejsca, to program zakańcza pętlę - nie rozumiem dlaczego. Jeśli dobrze rozumiem, to pętla powinna skończyć się wyłącznie tylko wtedy gdy przy cin >> dzialanie; zadeklaruje 0, mylę się? Bo to wygląda tak, jakby pętle obchodziło tylko wprowadzona liczba, a nie liczba przechowywana w zmiennej. Z góry dziękuję za pomoc. P.S Czy wszystko w tym kodzie działa zgodnie z treścią zadania? Brakuje mi jeszcze sprawdzenia błędów, ale czy oprócz tego wszystko się zgadza? Mam wrażenie, że mogłem nieprawidłowo zrozumieć treść zadania. Proszę nie zwracać uwagi na zmienną bool. #include <iostream> #include <limits> using namespace std;
int main() { int dzialanie = 0; float liczbaA, wynik = 0; bool blad; do { cout << "Wynik wynosi = " << wynik << endl << endl; cout << "Wprowadz liczbe wymagana do obliczen "; cin >> liczbaA; if( liczbaA != 0 ) { cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnożenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Rezygnuj" << endl; cout << "Wybrales liczbe = "; cin >> dzialanie; } if( dzialanie != 0 ) { switch( dzialanie ) { case 1: cout << "Wybrales dodawanie" << endl; wynik = wynik + liczbaA; break; case 2: cout << "Wybrales odejmowanie" << endl; cout << dzialanie; wynik = wynik - liczbaA; break; case 3: cout << "Wybrales mnozenie" << endl; wynik = wynik * liczbaA; break; case 4: cout << "Wybrales dzielenie" << endl; wynik = wynik / liczbaA; break; case 5: break; } } } while( dzialanie != 0 ); }
|
|
pekfos |
» 2022-06-08 23:27:37 Gdy wpisujesz zero do liczbaA, program nigdy nie pyta o działanie i pomija całą resztę bo działanie domyślnie jest zerowe. |
|
piratek Temat założony przez niniejszego użytkownika |
» 2022-06-09 06:10:05 Gdy wpisujesz zero do liczbaA, program nigdy nie pyta o działanie i pomija całą resztę, bo działanie domyślnie jest zerowe.
O jejku, rzeczywiście masz rację. A ja męczyłem się sporo czasu, by ustalić czemu, to nie działa prawidłowo. Dziękuję za pomoc, kłaniam się po same kule. Wróciłem z mam nadzieję skończonym kodem. Przetestowałem kod pod każdym względem i wydaję mi się, że wszystko działa prawidłowo, wedle treści zadania. Podsyłam na wszelki wypadek kod, by się upewnić, że rzeczywiście tak jest. Czy można było uprościć ten kod? Zrobić to jakoś inaczej? Trochę mnie pomęczył ten kod, ale cieszę się, że wreszcie udało mi się to zrobić. #include <iostream> #include <limits> using namespace std;
int main() { int dzialanie = 0; float liczbaA, wynik = 0; bool blad; do { cout << "Wynik wynosi = " << wynik << endl << endl; do { cout << "Wprowadz liczbe wymagana do obliczen "; cin >> liczbaA; blad = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( blad ); if( liczbaA != 0 ) { do { cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnożenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Rezygnuj" << endl; cout << "Wybrales liczbe = "; cin >> dzialanie; blad = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( blad ); ; switch( dzialanie ) { case 1: cout << "Wybrales dodawanie" << endl; wynik = wynik + liczbaA; break; case 2: cout << "Wybrales odejmowanie" << endl; wynik = wynik - liczbaA; break; case 3: cout << "Wybrales mnozenie" << endl; wynik = wynik * liczbaA; break; case 4: cout << "Wybrales dzielenie" << endl; wynik = wynik / liczbaA; break; case 5: break; } } } while( dzialanie != 0 ); }
|
|
pekfos |
» 2022-06-09 18:11:43 Jest prawie dobrze. Według treści zadania program powinien kończyć się jak podasz 0 jako liczbę (liczbaA), a nie jako działanie. |
|
piratek Temat założony przez niniejszego użytkownika |
» 2022-06-09 23:51:59 Czy teraz jest dobrze? #include <iostream> #include <limits> using namespace std;
int main() { int dzialanie; float liczbaA, wynik = 0; bool blad; do { cout << "Wynik wynosi = " << wynik << endl << endl; do { cout << "Wprowadz liczbe wymagana do obliczen "; cin >> liczbaA; blad = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( blad ); if( liczbaA != 0 ) { do { cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnożenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Rezygnuj" << endl; cout << "Wybrales liczbe = "; cin >> dzialanie; blad = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( blad ); switch( dzialanie ) { case 1: cout << "Wybrales dodawanie" << endl; wynik = wynik + liczbaA; break; case 2: cout << "Wybrales odejmowanie" << endl; wynik = wynik - liczbaA; break; case 3: cout << "Wybrales mnozenie" << endl; wynik = wynik * liczbaA; break; case 4: cout << "Wybrales dzielenie" << endl; wynik = wynik / liczbaA; break; case 5: break; } } } while( liczbaA != 0 ); }
|
|
pekfos |
» 2022-06-10 06:55:12 Teraz jest dobrze. |
|
« 1 » |