Problem z pętlą w c++


(Bzdenbartek) #1

Cześć.

Smaruję kalkulator w C++ i wszystko jest ok, tylko nie działa mi pętla, która ma za zadanie powtarzać dane działanie, lub wracać do "menu".

Mam taki oto kod i zapętla się na razie samo dodawanie 3 razy a później kończy się. Co z tym zrobić? I jaką instrukcję wpisać w else, żeby wychodziło do stanu początkowego (wybór działań)?

{

    double a, b, w;

    int d, p;

    cout<<" KALKULATOR"<
    cout<<" ****************"<
    cout<<"Wybierz dzialanie:"<
    cout<<"1. Dodawanie"<
    cout<<"2. Odejmowanie"<
    cout<<"3. Mnozenie"<
    cout<<"4. Dzielenie"<
    cout<<"0. KONIEC"<
    cin>>d;


    switch(d)

    {

           case 1:

           cout<<"Podaj pierwszy składnik: "<
           cin>>a;

           cout<<"Podaj drugi składnik: "<
           cin>>b;

           w = a + b;

           cout<
           cout<<"Czy chcesz powtorzyc dzialanie?"<
           cout<<"1. Tak"<
           cout<<"2. Nie"<
           cin>>p;

           if (p==1)

           {cout<<"Podaj pierwszy składnik: "<
           cin>>a;

           cout<<"Podaj drugi składnik: "<
           cin>>b;

           w = a + b;

           cout<
           cout<<"Czy chcesz powtorzyc dzialanie?"<
           cout<<"1. Tak"<
           cout<<"2. Nie"<
           cin>>p;}

           else

          break;




           case 2:

           cout<<"Podaj odjemna: "<
           cin>>a;

           cout<<"Podaj odjemnik: "<
           cin>>b;

           w = a - b;

           cout<
           break;


           case 3:

           cout<<"Podaj pierwszy czynniki: "<
           cin>>a;

           cout<<"Podaj drugi czynnik: "<
           cin>>b;

           w = a * b;

           cout<
           break;


           case 4:

           cout<<"Podaj dzielna: "<
           cin>>a;

           cout<<"Podaj dzielnik: "<
           cin>>b;

           w = a / b;

           cout<
           break;


           case 0:

           return EXIT_SUCCESS;

    }       



    system("PAUSE");

    return EXIT_SUCCESS;

}

[/code]

(Razi) #2

Pytanie czy powtórzyć umieść za Switchem.

A cały kod zamieść w pętli do while


(Sawyer47) #3

Otocz to co chcesz aby się powtarzało pętlą while (true) { ... }.


(Bzdenbartek) #4

Nie działa do końca. Tu jest ok, ale co jeżeli chce powtórzyć inne działanie niż dodawanie?


(Fordmtonly) #5

Tak jak zaproponował nr47: otocz to co chcesz pętlą nieskończoną.

Tak na oko wychodzi że chcesz otoczyć to:

cout<<" KALKULATOR"<
    cout<<" ****************"<
    cout<<"Wybierz dzialanie:"<
    cout<<"1. Dodawanie"<
    cout<<"2. Odejmowanie"<
    cout<<"3. Mnozenie"<
    cout<<"4. Dzielenie"<
    cout<<"0. KONIEC"<
    cin>>d;


    switch(d)

    {

           case 1:

           cout<<"Podaj pierwszy składnik: "<
           cin>>a;

           cout<<"Podaj drugi składnik: "<
           cin>>b;

           w = a + b;

           cout<
           cout<<"Czy chcesz powtorzyc dzialanie?"<
           cout<<"1. Tak"<
           cout<<"2. Nie"<
           cin>>p;

           if (p==1)

           {cout<<"Podaj pierwszy składnik: "<
           cin>>a;

           cout<<"Podaj drugi składnik: "<
           cin>>b;

           w = a + b;

           cout<
           cout<<"Czy chcesz powtorzyc dzialanie?"<
           cout<<"1. Tak"<
           cout<<"2. Nie"<
           cin>>p;}

           else

          break;


           case 2:

           cout<<"Podaj odjemna: "<
           cin>>a;

           cout<<"Podaj odjemnik: "<
           cin>>b;

           w = a - b;

           cout<
           break;


           case 3:

           cout<<"Podaj pierwszy czynniki: "<
           cin>>a;

           cout<<"Podaj drugi czynnik: "<
           cin>>b;

           w = a * b;

           cout<
           break;


           case 4:

           cout<<"Podaj dzielna: "<
           cin>>a;

           cout<<"Podaj dzielnik: "<
           cin>>b;

           w = a / b;

           cout<
           break;


           case 0:

           return EXIT_SUCCESS;

    } [/code]




a ten kawałek to bym wyrzucił ze switcha i zostawił za każdym razem powrót do menu głównego:

[code] cout<<"Czy chcesz powtorzyc dzialanie?"< cout<<"1. Tak"< cout<>p;}
ale jak się uprzesz że jednak chcesz to zostawić to proponuję na menu główne IFa np coś mniej więcej takiego:

if(p==2 || p==0)

a to wywal:

if (p==1)

           {cout<<"Podaj pierwszy składnik: "<
           cin>>a;

           cout<<"Podaj drugi składnik: "<
           cin>>b;

           w = a + b;

           cout<
           cout<<"Czy chcesz powtorzyc dzialanie?"<
           cout<<"1. Tak"<
           cout<<"2. Nie"<
           cin>>p;}

           else[/code]




i zmienić inicjalizację p na początku na np wartość 0:

[code]int p=0;

Jakoś tak mniej więcej :wink: Nie mam czasu pisać całego kodu więc sam to sklej jakoś ;p

a w skrócie powinno zadziałać to tak:

p na początku zainicjalizowane na 0 zapewni nam wyświetlenie menu co najmniej raz. Potem menu wyświetli się nam tylko wtedy jak do p przypiszemy 2. W innym przypadku (p==1) menu się nie wyświetli i wartość d pozostanie ta sama i dzięki temu powtórzy się ostatnie działanie.