Lekcja 15 kalkulator
Ostatnio zmodyfikowano 2012-05-27 16:05
Luke_Skywalker Temat założony przez niniejszego użytkownika |
Lekcja 15 kalkulator » 2012-05-27 14:03:11 Witam serdecznie i przedstawiam kolejny post z serii [Lekcja 15 - kalkulator] ;) Głównie chciałbym się pochwalić zrobionym przez siebie kalkulatorkiem i poprosić o opinię ludzi nieco bardziej obeznanych. #include <iostream> using namespace std;
int main()
{ int wybor; float a, wynik = 0; do { cout << "=====Kalkulator=====" << endl; cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnozenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Rezygnuj" << endl; cout << "Aktualny wynik: " << wynik << endl; cout << "Podaj liczbe: "; cin >> a; if( cin.good() == false ) do { cin.clear(); cin.sync(); cout << "Podaj liczbe:"; cin >> a; } while( cin.good() == false ); cin.clear(); cin.sync(); if( a == 0 ) { system( "pause" ); return 0; } do { cout << "Wybierz dzialanie: "; cin >> wybor; cin.clear(); cin.sync(); } while( wybor != 1 && wybor != 2 && wybor != 3 && wybor != 4 && wybor != 5 ); switch( wybor ) { case 1: wynik += a; break; case 2: wynik -= a; break; case 3: wynik *= a; break; case 4: wynik /= a; break; case 5: system( "pause" ); return 0; } system( "cls" ); } while( 1 == 1 ); }
|
|
xevuel |
» 2012-05-27 14:13:38 O słowie kluczowym true nie słyszałeś? |
|
Luke_Skywalker Temat założony przez niniejszego użytkownika |
» 2012-05-27 14:21:25 W zasadzie do tej pory nie, bo mimo wszystko dopiero uczę się podstaw, ale stwierdziłem, że skoro wystarczy, że warunek tej pętli zawsze będzie spełniony to mogę stworzyć tam coś. Zabawiłem się w harcerza i byłem ciekaw czy tak to działa. To tyle :) Chyba udało mi się wyłapać własny błąd. Otóż brakuje nawiasów klamrowych przy instrukcji: if( cin.good() == false ) { do { cin.clear(); cin.sync(); cout << "Podaj liczbe:"; cin >> a; } while( cin.good() == false ); }
Bez tego sprawdzanie poprawności wybranej operacji zawodzi. Cóż, czasem warto 'wgryźć się' ponownie ;) Jeśli ktoś znajdzie jakiekolwiek inne niedopatrzenia, będę bardzo wdzięczny za informacje. ... poprawka, nadal nie działa ^^" |
|
Luke_Skywalker Temat założony przez niniejszego użytkownika |
» 2012-05-27 16:05:17 Dobra, nadal nie umiem znaleźć błędu, który sprawia, że przy drugim przebiegu całej wielkiej pętli w której zawarty jest program, sprawdzanie poprawności wyboru nie działa, a w przypadku wybrania błędnej operacji program wykonuje operację wybraną przy poprzednim przebiegu. Jeśli ktoś zrozumiał o co mi chodzi to prosiłbym o pomoc ;) #include <iostream> using namespace std;
int main()
{ int wybor; float a, wynik = 0; do { cout << "=====Kalkulator=====" << endl; cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnozenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Rezygnuj" << endl; cout << "Aktualny wynik: " << wynik << endl; cout << "Podaj liczbe: "; cin >> a; if( cin.good() == false ) { do { cin.clear(); cin.sync(); cout << "Podaj liczbe:"; cin >> a; } while( cin.good() == false ); } cin.clear(); cin.sync(); if( a == 0 ) { system( "pause" ); return 0; } do { cout << "Wybierz dzialanie: "; cin >> wybor; cin.clear(); cin.sync(); } while( wybor != 1 && wybor != 2 && wybor != 3 && wybor != 4 && wybor != 5 ); switch( wybor ) { case 1: wynik += a; break; case 2: wynik -= a; break; case 3: wynik *= a; break; case 4: wynik /= a; break; case 5: system( "pause" ); return 0; } system( "cls" ); } while( 1 == 1 ); }
Odkryłem jedynie, że jeśli błędnym wyborem jest liczba lub cyfra to pętla działa poprawnie, lecz jeśli jest to ciąg znaków np 'nie', 'tak', 'bla' to program zaczyna wykonywać ostatnio wybrane dzialanie. Pomaga dopiero przypisanie przypisanie np '0' do zmiennej 'wybór' po wykonaniu zadania z case'a. |
|
« 1 » |