bartinio07 Temat założony przez niniejszego użytkownika |
Kalkulator - lekcja 15. » 2016-08-25 00:27:28 Witam, mam problem z zadaniem domowym: Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco: 1. Wypisuje obecny wynik 2. Wprowadź liczbę 3. Wybierz działanie (jeżeli liczba różna od 0) 4. Wykonaj obliczenia (jeżeli liczba różna od 0) 5. Wróć do kroku 1. 6. Jeżeli wprowadzoną liczbą jest 0, zakończ program. Napisałem taki program: #include <iostream> using namespace std; int main() { int liczba; int dzialanie; int wynik = 10; bool zabezpieczenie1, zabezpieczenie2; cout << "\tWitaj w moim kalkulatorze" << endl << endl; cout << "Obecny wynik to: " << wynik << endl; do { cout << "Wprowadz liczbe: "; cin >> liczba; zabezpieczenie1 = cin.good(); cin.clear(); cin.sync(); if( zabezpieczenie1 == cin.fail() ) cout << "Wprowadzona liczba jest nieprawidlowa" << endl; if( liczba != 0 ) { cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnozenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Rezygnuj" << endl; cout << "Wybierz dzialanie, jakie chcesz wykonac: "; cin >> dzialanie; zabezpieczenie2 = cin.good(); cin.clear(); cin.sync(); switch( dzialanie ) { case 1: wynik = wynik + liczba; cout << "Obecny wynik to: " << wynik << endl; break; case 2: wynik = wynik - liczba; cout << "Obecny wynik to: " << wynik << endl; break; case 3: wynik = wynik * liczba; cout << "Obecny wynik to: " << wynik << endl; break; case 4: wynik = wynik / liczba; cout << "Obecny wynik to: " << wynik << endl; break; } } if( zabezpieczenie2 == cin.fail() ) cout << "Nieprawidlowe dzialanie" << endl; if( dzialanie == 5 ) { cout << "Zrezygnowales" << endl; return 0; } } while( zabezpieczenie1 == cin.fail(), zabezpieczenie2 == cin.fail(), 0 < dzialanie <= 5 ); return 0; }
Wszystko działa, jednak nie spełniłem punktu 6. - jeśli wpiszę 0 program nie kończy się, lecz pętla się powtarza, i na tym właśnie polega mój problem. Co powinienem zrobić, aby program po wpisaniu 0 zakończył się? |
|
carlosmay |
» 2016-08-25 08:30:01 while( zabezpieczenie1 == cin.fail(), zabezpieczenie2 == cin.fail(), 0 < dzialanie <= 5 ); |
? |
|
kistel66 |
» 2016-08-25 11:51:04 while( zabezpieczenie1 == cin.fail(), zabezpieczenie2 == cin.fail(), 0 < dzialanie <= 5 ); Wut? Łatwiej byłoby chyba: while( liczba != 0 ); |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2016-08-25 16:00:19 Próbowałem już z warunkiem while( liczba = !0 ); , ale nadal działa tak samo - po wpisaniu zera program się nie kończy, tylko pętla powtarza się. |
|
michal11 |
» 2016-08-25 16:26:21 |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2016-08-25 19:10:19 Sorry, błąd przez nieuwagę. Teraz po wpisaniu tekstu zamiast liczby albo działania, program kończy się, zamiast powtórzenia pętli. |
|
kistel66 |
» 2016-08-25 19:24:01 Przykładowa kontrola błędu: while( !( cin >> liczba ) ) { cout << endl << "Blad, podaj poprawna liczbe: "; cin.clear(); cin.sync(); }
Poza tym w switchu nie masz żadnego default, co jak ktoś wpisze liczbę większą od pięć? |
|
merkuriusz |
moze tak? » 2016-08-27 14:15:49 #include <iostream> #include <cstdlib>
using namespace std;
float liczba, wynik = 33; int dzialanie;
int main() { cout << "Witam w zabawie z kalulatorem." << endl; do { cout << "Aktualny wynik = " << wynik << endl; cout << "Wprowadz dowolna liczbe: "; cin.clear(); cin.sync(); cin >> liczba; if( cin.good() ) { if( liczba != 0 ) { cout << "Wybierz dzialanie: " << endl; cout << "[1] dodawania" << endl; cout << "[2] odejmowanie" << endl; cout << "[3] mnozenie" << endl; cout << "[4] dzielenie" << endl; cout << "[5] rezygnuje" << endl; cin.clear(); cin.sync(); cin >> dzialanie; switch( dzialanie ) { case 1: wynik += liczba; break; case 2: wynik -= liczba; break; case 3: wynik *= liczba; break; case 4: wynik /= liczba; break; case 5: exit( 0 ); break; default: cout << "Nieprawidlowe dzialanie " << endl; } } else cout << "Wybrales '0'. Pa pa"; } else { cout << "Nie podano liczby. Sprobuj ponownie." << endl; liczba = 1; } } while( liczba != 0 ); return 0; }
|
|
« 1 » 2 |