Kalkulator do while, bool, zabezpieczenie przed literami

0

Witam, otóż mam problem z zadaniem z strony cpp0x o następującej treści :

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.

Na razie mam takie coś :

 #include <iostream>

using namespace std;

int main()
{

int nr, liczba1, liczba2;

    cout << "[1] DODAWANIE"
        << "\n[2] ODEJMOWANIE"
        << "\n[3] MNOZENIE"
        << "\n[4] DZIELENIE"
        << "\n[5] REZYGNUJ" << endl;

do
{
    cout << "\nPodaj numer: ";
    cin >> nr;
    if(nr == 5)
    {
        cout << "Zrezygnowales z dzialnia progrmu.";
        return 0;
    }
    cout << "\nPodaj liczbe 1. : ";
    cin >>  liczba1;
    cout << "\nPodaj liczbe 2. : ";
    cin >> liczba2;
    switch(nr)
    {
    case 1:
        cout << liczba1 << " + " << liczba2
            << " = " << liczba1 + liczba2;
        break;
    case 2:
        cout << liczba1 << " - " << liczba2
            << " = " << liczba1 - liczba2;
        break;
    case 3:
        cout << liczba1 << " * " << liczba2
            << " = " << liczba1 * liczba2;
        break;
    case 4:
        cout << liczba1 << " / " << liczba2
            << " = " << liczba1 / liczba2;
        break;

    }
    }while(nr != 5);

    return 0;
}

Jak zabezpieczyć przed wpisywaniem 0 i liter?!

0

co do zabezpieczenia się przed wpisywaniem liczb możesz użyć tej funkcji: http://www.cplusplus.com/reference/iostream/ios/good/. Sprawdza ona czy nie są ustawione flagi błędu. Jak byś chciał do obiektu typu całkowitego wczytać jakiś ciąg znaków to w strumieniu ustawią się odpowiednie flagi błędu.

0
#include <iostream>

using namespace std;

int main()
{

int nr, liczba1, liczba2;
bool prawda;

    cout << "[1] DODAWANIE"
        << "\n[2] ODEJMOWANIE"
        << "\n[3] MNOZENIE"
        << "\n[4] DZIELENIE"
        << "\n[5] REZYGNUJ" << endl;
prawda = cin.good();
do
{
    cout << "\nPodaj numer ( 1 - 5 ) : ";
    cin >> nr;
    cin.clear();
    cin.sync();


    if (nr > 5 || nr <= 0 )
    {
        cout << "\nPodaj numer ( 1 - 5 ) : ";
        cin >> nr;
        cin.clear();
        cin.sync();
    }

    if(nr == 5)
    {
        cout << "Zrezygnowales z dzialnia progrmu.";
        return 0;
    }
    if(nr > 0 && nr <= 5)
    {

    cout << "\nPodaj liczbe 1. : ";
    cin >>  liczba1;
    cout << "\nPodaj liczbe 2. : ";
    cin >> liczba2;

    }
    switch(nr)
    {
    case 1:
        cout << liczba1 << " + " << liczba2
            << " = " << liczba1 + liczba2;
        break;
    case 2:
        cout << liczba1 << " - " << liczba2
            << " = " << liczba1 - liczba2;
        break;
    case 3:
        cout << liczba1 << " * " << liczba2
            << " = " << liczba1 * liczba2;
        break;
    case 4:
        if(liczba2 == 0)
        {
            cout << "Nie mozna dzielic przez 0!";
            break;
        }
        cout << liczba1 << " / " << liczba2
            << " = " << liczba1 / liczba2;
        break;


    }
    }while(cin.good() == 1);

    return 0;
}

Nakombinowałem i jakoś się udało spełnić wszystkie wymagania zadania... Podałem kod bo sam wiem że wiele osób które robią ten kurs też mają z tym problem, a teraz mogą się jakoś pokierować. Zdaje sobie sprawę że można to było zrobić na 100 innych sposobów i na pewno krócej, ale chyba chodzi o to żeby działało czyż nie ? :)

0
  1. Zabezpieczenie przed wpisywaniem liter
  2. Taki kod zabezpieczajacy wepchnij w nową funkcję np.
int wczytajLiczbe(){ ... }

I potem jej używaj a nie kopiuj ten sam kawałek kodu 100 razy...

1 użytkowników online, w tym zalogowanych: 0, gości: 1