Lekcja 17, zadanie 2, pętla do ... while nie działa prawidłowo
Ostatnio zmodyfikowano 2020-11-06 13:40
r.deer Temat założony przez niniejszego użytkownika |
Lekcja 17, zadanie 2, pętla do ... while nie działa prawidłowo » 2020-11-05 20:04:06 Napotkałam na kolejny banalny problem, którego nie umiem przeskoczyć. Treść zadania jest następująca: "Zmodyfikuj kalkulator, który pisałeś w jednym ze wcześniejszych rozdziałów tak, aby korzystał on ze wcześniej napisanej funkcji wczytajLiczbe." Zastosowałam w kodzie pętlę do ... while, żeby można było wykonać dowolną liczbę razy działania na wczytanych liczbach, gdy się wciśnie "e". I problem jest taki, że jeśli wciśnie się "e" przed wyborem rodzaju działania, pętla się wykonuje i znów pojawia się lista możliwych do wykonania działań i można wybrać jedno z nich, lub "z" (zamknięcie programu) lub "e". Ale gdy wybierze się jedno z tych działań i program je wykona, już nie można wykonać pętli. Wciśnięcie "e" zamyka program. Czemu tak się dzieje? Kod wygląda następująco: #include <iostream> #include <cmath> #include <conio.h> using namespace std; int wczytajLiczbe1() { cout << "Podaj liczbe: "; int liczba1; cin >> liczba1; while( cin.fail() ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "To nie jest liczba. Podaj liczbe: "; cin >> liczba1; } return( liczba1 ); } int wczytajLiczbe2() { cout << "Podaj liczbe: "; int liczba2; cin >> liczba2; while( cin.fail() ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "To nie jest liczba. Podaj liczbe: "; cin >> liczba2; } return( liczba2 ); }
int main() { cout << "Kalkulator." << endl; int dzialanie = 0; char a = 'a'; char b = 'b'; char c = 'c'; char d = 'd'; char e = 'e'; char z = 'z'; int liczba1 = wczytajLiczbe1(); int liczba2 = wczytajLiczbe2(); do { cout << "Wybierz dzialanie: " << endl; cout << "dodawanie " << a << endl; cout << "odejmowanie " << b << endl; cout << "mnozenie " << c << endl; cout << "dzielenie " << d << endl; cout << "Aby zakonczyc program wcisnij " << z << endl; cout << "Aby ponownie wykonac obliczenia wcisnij " << e << endl; dzialanie = _getch(); if( dzialanie == a || dzialanie == b || dzialanie == c || dzialanie == d ) { switch( dzialanie ) { case 'a': cout << "Suma = " << liczba1 + liczba2 << endl; break; case 'b': cout << "Roznica = " << liczba1 - liczba2 << endl; break; case 'c': cout << "Iloczyn = " << liczba1 * liczba2 << endl; break; case 'd': cout << "Iloraz = " << liczba1 / liczba2 << endl; break; } } } while( dzialanie == e ); return 0; }
|
|
kubasuperpl |
» 2020-11-06 13:40:09 Ten kod while( dzialanie == e ); powinien wyglądać w ten sposób: while( dzialanie != z ); |
|
« 1 » |