Kalkulator - lekcja 15.
Ostatnio zmodyfikowano 2016-08-28 17:46
bartinio07 Temat założony przez niniejszego użytkownika |
» 2016-08-27 14:59:41 Okej, trochę zmodyfikowałem program i teraz wygląda to tak: #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: "; while( !( cin >> liczba ) ) { cout << "Blad, podaj poprawna liczbe: "; cin.clear(); cin.sync(); } 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: "; while( !( cin >> dzialanie ) ) { cout << "Blad, podaj poprawne dzialanie: "; cin.clear(); cin.sync(); } switch( dzialanie ) { case 0: cout << "Wprowadziles liczbe 0. Dzialanie programu zostalo zakonczone" << endl; return 0; break; 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; case 5: cout << "Zrezygnowales" << endl; break; default: cout << "Nieprawidlowe dzialanie" << endl; } } else cout << "Zakonczono" << endl; } while( liczba != 0 ); return 0; }
Wszystko działa jak nalezy :) Ale jeszcze z czystej ciekawości zapytam: zmienne bool, które zastosowałem na początku, okazały się teraz bezużyteczne, bo wykorzystałem pomysł na kontrolę błędu, jaki zaproponował kistel66. Czy można jeszcze jakoś zmodyfikować kod, aby to właśnie one odpowiadały za kontrolę błędu? |
|
kistel66 |
» 2016-08-28 12:32:38 Jakby się uprzeć, to można wszystko. Ale czy takie rozwiązanie byłoby najlepsze? Jeśli zależy ci na boolach: if( !( cin >> liczba ) ) zabezpieczenie1 = true; else zabezpieczenie1 = false;
while( zabezpieczenie1 ) { cout << "Blad, podaj poprawna liczbe: "; cin.clear(); cin.sync(); cin >> liczba; if( !( !cin >> liczba ) ) break; }
To jest takie pierwsze rozwiązanie, które mi wpadło do głowy. Pewnie dałoby się jakoś lepiej to zrobić |
|
karambaHZP |
» 2016-08-28 13:52:54 @bartinio07 sposób jest prosty i skuteczny. Nie ma sensu go komplikować. Można ewentualnie zrobić funkcję wczytującą do dowolnego typu liczbowego: #include <iostream> #include <limits> using namespace std;
template < class T > T pobierzLiczbe() { T liczba = T { }; while( !( cin >> liczba ) ) { cout << "blad: "; cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } return liczba; }
int main() { int iLiczba = pobierzLiczbe < int >(); double dLiczba = pobierzLiczbe < double >(); cout << iLiczba << ": " << dLiczba << '\n'; } Funkcja napisana na podstawie przykładu B.Stroustrupa. |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2016-08-28 17:46:49 Dzięki :) w takim razie zabieram się za kolejną lekcję. |
|
1 « 2 » |