Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kalkulator - lekcja 15.

Ostatnio zmodyfikowano 2016-08-28 17:46
Autor Wiadomość
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:
C/C++
#include <iostream>
using namespace std;
int main()
{
    int liczba;
    int dzialanie;
    int wynik = 10;
    bool zabezpieczenie1, zabezpieczenie2; //teraz sa bezuzyteczne
    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: "; //poki strumien jest w stanie bledu...
            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 ) ) //poki strumien jest w stanie bledu...
            {
                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?
P-151140
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:

C/C++
if( !( cin >> liczba ) ) zabezpieczenie1 = true; //jesli ktos wpisze nieliczbowa wartosc, ustaw zabezpieczenie na true;
else zabezpieczenie1 = false;

while( zabezpieczenie1 ) //poki zabezpieczenie1 jest true...
{
    cout << "Blad, podaj poprawna liczbe: ";
    cin.clear();
    cin.sync();
    cin >> liczba;
    if( !( !cin >> liczba ) ) break; // negacja negacji, czyli jak ktoś wpisze dobra liczbe, petla sie przerwie
   
}

To jest takie pierwsze rozwiązanie, które mi wpadło do głowy. Pewnie dałoby się jakoś lepiej to zrobić
P-151157
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:
C/C++
#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.
P-151159
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ę.
P-151163
1 « 2 »
Poprzednia strona Strona 2 z 2