Problem z pętlą w kalkulatorze

0
#include <iostream>
using namespace std;
 
int main ()
{
    double a;
    double b;
    int akcja;
 
    do
    {
        cout << "Podaj pierwsza liczbe ( rozna od zera ): ";
        cin >> a;
        cout << "Teraz druga ( rozna od zera ): ";
        cin >> b;
 
        if (a != 0)
        if (b != 0)
        {
        bool warunek;
        do
          {
 
 
        cout << "Wybierz:" << endl;
        cout << "1 - Dodaj" << endl;
        cout << "2 - Odejmij" << endl;
        cout << "3 - Pomnoz" << endl;
        cout << "4 - Podziel" << endl;
        cout << "5 - Rezygnuj" << endl;
        cout << endl;
 
        cin >> akcja;
 
        bool w1 (akcja != 1);
        bool w2 (akcja != 2);
        bool w3 (akcja != 3);
        bool w4 (akcja != 4);
        bool w5 (akcja != 5);
        warunek = (w1 & w2 & w3 & w4 & w5);
 
 
            switch (akcja)
            {
                case 1:
                    cout << a << " + " << b << " = " << a + b << endl;
                    break;
                case 2:
                    cout << a << " - " << b << " = " << a - b << endl;
                    break;
                case 3:
                    cout << a << " * " << b << " = " << a * b << endl;
                    break;
                case 4:
                    cout << a << " / " << b << " = " << a / b << endl;
                    break;
            }
          } while (warunek = true);
        }
    } while (akcja != 5);
 
    return 0;
}

Zakładam ponownie, tym razem z poprawionym tematem i w odpowiednim dziale.

Uczyłem się ze stronki http://cpp0x.pl/kursy/Kurs-C++/1 i doszedłem do 14 rozdziału gdzie właśnie było zadanie zrobić taki kalkulator, gdyby ktoś chciał wiedzieć.
Wiem już, że to się nie trzyma kupy, dlatego proszę o pomoc.

Aha, problem jest taki, że po wybraniu 5 powraca mi znów do wyboru, a powinno to przerwać pętle.

0

} while (warunek = true);

Masz przypisanie, zamiast porównania, powinno być ==.

EDIT:
btw, czy zamiast:

bool w1 (akcja != 1);
        bool w2 (akcja != 2);
        bool w3 (akcja != 3);
        bool w4 (akcja != 4);
        bool w5 (akcja != 5);
        warunek = (w1 & w2 & w3 & w4 & w5);

nie prościej:

! (akcja <= 5 && akcja >= 1)

?

0

zmienna warunek nigdy nie osiągnie wartości true: zawsze któraś z w1, w2 .. w5 będzie false, a do warunek przypisujesz ich iloczyn, a cokolwiek pomnożone przez 0 (false) daje 0.

Poza tym w samym warunku pętli masz nie porównanie tylko przypisanie, a jako że przypisujesz true, to wynikiem tego przypisania również będzie true, czyli z pętli nie wyjdzie, bo "warunek" jest spełniony.

0
#include <iostream>
using namespace std;

int main ()
{
    double a;
    double b;
    int akcja;

    do
    {
        cout << "Podaj pierwsza liczbe ( rozna od zera ): ";
        cin >> a;
        cout << "Teraz druga ( rozna od zera ): ";
        cin >> b;

        if (a != 0)
        if (b != 0)
        {
        bool warunek (! (akcja >= 1 && akcja <= 4));

        do
          {


        cout << "Wybierz:" << endl;
        cout << "1 - Dodaj" << endl;
        cout << "2 - Odejmij" << endl;
        cout << "3 - Pomnoz" << endl;
        cout << "4 - Podziel" << endl;
        cout << "5 - Rezygnuj" << endl;
        cout << endl;

        cin >> akcja;

            switch (akcja)
            {
                case 1:
                    cout << a << " + " << b << " = " << a + b << endl;
                    break;
                case 2:
                    cout << a << " - " << b << " = " << a - b << endl;
                    break;
                case 3:
                    cout << a << " * " << b << " = " << a * b << endl;
                    break;
                case 4:
                    cout << a << " / " << b << " = " << a / b << endl;
                    break;
            }
          }while (warunek == true);
        }
    }while (akcja != 5);

    return 0;
}


Poprawiłem według waszych wskazówek, ale nadal dzieje się to samo.

Odświeżam. Pomoże ktoś?

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