Rozdział 15 Zadanie drugie.
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Rozdział 15 Zadanie drugie.

AutorWiadomość
Temat założony przez niniejszego użytkownika
Rozdział 15 Zadanie drugie.
» 2018-03-26 19:29:24
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.
*Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb i operacji. Wykorzystaj wiedzę zdobytą z pierwszego zadania pracy domowej niniejszego rozdziału. Zabezpiecz również w analogiczny sposób przed możliwością wyboru nieprawidłowego działania.

Wystrugałem takiego pinokia, ale nie do końca on działa. Pierwsze pięć punktów wydaje mi się zrobione dobrze, natomiast mam problem przy 6 punkcie.
W momencie w którym wprowadzę jako liczbę - 0 - program nie chce się zakończyć. Dopiero kończy się, kiedy przeprowadzę jakiekolwiek działanie na dwóch zerach.


//-- EDIT

Dobra poprawiłem trochę kod + zabezpieczyłem przed wpisywaniem niepoprawnych znaków, ale nadal program zamyka się dopiero po wpisaniu w obydwie liczby zera - a chciałbym aby wystarczyło wpisać jedno zero.

Aktualny kod:

C/C++
#include <iostream>

int a, b, wynik, dzialanie;
bool aP;
bool bP;

int main()

{
   
    do
    {
        std::cout << "Wynik wynosi : " << wynik << std::endl;
        std::cin.clear();
        std::cin.sync();
        do
        {
            std::cout << "Podaj pierwsza liczbe : " << std::endl;
            std::cin >> a;
            aP = std::cin.good();
            std::cin.clear();
            std::cin.sync();
        } while( aP != 1 );
       
        do
        {
            std::cout << "Podaj druga liczbe : " << std::endl;
            std::cin >> b;
            bP = std::cin.good();
            std::cin.clear();
            std::cin.sync();
        } while( bP != 1 );
       
        if(( a != 0 ) &&( b != 0 ) )
        {
            std::cout << "Wybierz dzialanie: \n [1] - Dodawanie | \n [2] - Odejmowanie | \n [3] - Mnozenie | \n [4] - Dzielenie | \n [5] - Rezygnuje |" << std::endl;
            std::cin >> dzialanie;
        }
        if(( a != 0 ) &&( b != 0 ) )
        {
            switch( dzialanie )
            {
            case 1:
                wynik = a + b;
                std::cout << "Obliczam \n";
                std::cout << a << " + " << b << " = " << wynik << std::endl;
                break;
            case 2:
                wynik = a - b;
                std::cout << "Obliczam \n";
                std::cout << a << " - " << b << " = " << wynik << std::endl;
                break;
            case 3:
                wynik = a * b;
                std::cout << "Obliczam \n";
                std::cout << a << " * " << b << " = " << wynik << std::endl;
                break;
            case 4:
                wynik = a / b;
                std::cout << "Obliczam \n";
                std::cout << a << " / " << b << " = " << wynik << std::endl;
                break;
            case 5:
                std::cout << "Zrezygnowales!" << std::endl;
                return 0;
                break;
            default:
                std::cout << "Cos zepsules - sprobuj jeszcze raz!" << std::endl;
                break;
            }
        }
    } while(( a != 0 ) ||( b != 0 ) );
   
    return 0;
}
P-170277
» 2018-03-27 14:14:20
zastanów się ?
co muszę sprawdzić po wyjściu z pętli pobierania pierwszej liczby ?
przed wejściem w drugą pętlę pobierania drugiej liczby
i przerwać to wejście 

np. if (....)





P-170301
Temat założony przez niniejszego użytkownika
» 2018-03-27 17:28:31
Rzeczywiście - wystarczyło wpisać ten kod po pętlach w której wprowadzam i sprawdzam liczbę.
Tak proste rozwiązanie, że sam bym na to nigdy nie wpadł :D
Dzięki wielkie.

C/C++
if( a == 0 )
{
    std::cout << "Koniec programu.";
    return 0;
}
P-170309
« 1 »
 Strona 1 z 1