Switch i bool (konflikt)

0
#include <iostream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int main()
{
    char znak;
    float wynik,liczba,liczba2;
    bool pierwsze = true;


    do
    {
    if(pierwsze==true)
    {
    cout << "Podaj pierwsza liczbe" << endl;
    cin >> liczba;
    cout << "Podaj druga liczbe" << endl;
    cin >> liczba2;
    }
    if(pierwsze==false)
    {
    cout << "Podaj kolejna liczbe" << endl;
    cin >> liczba2;
    }


    cout << "|*************************|" << endl;
    cout << "|     Wybierz dzialanie:  |" << endl;
    cout << "|     +. Dodawanie        |" << endl;
    cout << "|     -. Odejmowanie      |" << endl;
    cout << "|     *. Mnozenie         |" << endl;
    cout << "|     /. Dzielenie        |" << endl;
    cout << "|*************************|" << endl;
    cout << "|     c. Wyczysc          |" << endl;
    cout << "|     =. Wynik uzyskac    |" << endl;
    cout << "|     x. Wyjscie          |" << endl;
    cout << "|*************************|" << endl;
    cout << endl;
    cout << "Podaj numer opcji" << endl;
    cin >> znak;
    cout << endl;



    switch(znak)
    {
        case '+':
        {
            wynik=liczba + liczba2;
            return false;
        }
          case '-':
        {
            wynik=liczba - liczba2;
            return false;
        }
          case '*':
        {
            wynik=liczba * liczba2;
            return false;
        }
          case '/':
        {
            wynik=liczba / liczba2;
            return false;
        }
        case 'c':
        {
        cout << "Trwa czyszczenie" << endl;
        wynik=0;
        return true;
        system("pause");
        }
        case '=':
        {
        cout << wynik << endl;
        system("pause");
        wynik=0;
        return true;
        }
        case 'x':
        {
        cout << "Trwa zamykanie" << endl;
        system("cls");
        system("pause");
        break;
        }
        default:
        {
            cout << "zla wartosc" << endl;
            return false;
        }
    }
    cout << "wyszla poza" << endl;
}
    while(znak!='x');
cout << "ale skok" << endl;
system("pause");
return 0;

}

**Co powinienem poprawić by ten program odpalił?

  • I takie drugie pytanie dlaczego jak zmienie return true; na prawdziwe=true; to wskakuje w to miejsce mi funkcja switch nie zważając wcale na case tylko na bool?
0

Co powinienem poprawić by ten program odpalił?

Program odpala. Ale nie wiadomo jak go używać, każe mi wybrać „numer opcji” a do wyboru mam tylko jakieś znaczki.

return false czy return true odnosi się do funkcji main(), czyli zakańcza działanie programu. dalsza część się nie wykonuje.

0

to wiem ;) do wyboru masz przecież te znaczki w switch ;) w tekscie powinien byc napisany znak zamiast liczba i już :P

#include <iostream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int main()
{
    char znak;
    float wynik,liczba,liczba2;
    bool pierwsze = true;


    do
    {
    if(pierwsze==true)
    {
    cout << "Podaj pierwsza liczbe" << endl;
    cin >> liczba;
    cout << "Podaj druga liczbe" << endl;
    cin >> liczba2;
    }
    if(pierwsze==false)
    {
    cout << "Podaj kolejna liczbe" << endl;
    cin >> liczba2;
    }


    cout << "|*************************|" << endl;
    cout << "|     Wybierz dzialanie:  |" << endl;
    cout << "|     +  Dodawanie        |" << endl;
    cout << "|     - Odejmowanie      |" << endl;
    cout << "|     * Mnozenie         |" << endl;
    cout << "|     / Dzielenie        |" << endl;
    cout << "|*************************|" << endl;
    cout << "|     c  Wyczysc          |" << endl;
    cout << "|     = Wynik uzyskac    |" << endl;
    cout << "|     x Wyjscie          |" << endl;
    cout << "|*************************|" << endl;
    cout << endl;
    cout << "Podaj wybor" << endl;
    cin >> znak;
    cout << endl;



    switch(znak)
    {
        case '+':
        {
            wynik=liczba + liczba2;
            pierwsze=false;
        }
          case '-':
        {
            wynik=liczba - liczba2;
            pierwsze=false;
        }
          case '*':
        {
            wynik=liczba * liczba2;
            pierwsze=false;
        }
          case '/':
        {
            wynik=liczba / liczba2;
            pierwsze= false;
        }
        case 'c':
        {
        cout << "Trwa czyszczenie" << endl;
        wynik=0;
        pierwsze= true;
        system("pause");
        }
        case '=':
        {
        cout << wynik << endl;
        system("pause");
        wynik=0;
        pierwsze =true;
        }
        case 'x':
        {
        cout << "Trwa zamykanie" << endl;
        system("cls");
        system("pause");
        break;
        }
        default:
        {
            cout << "zla wartosc" << endl;
            pierwsze= false;
        }
    }
}
    while(znak!='x');
system("pause");
return 0;

}

 

ale to dalej nie działa.
bo czyści mi od razu w switchu i co ja biedny mam zrobić z tym fantem? xD

1

a w switchu to sie break'ow nie uzywa?

0

komenda return wychodzi z biezacej funkcji (w twoim przypadku main). Uzyj jej, gdy klikniesz 'x'.

 
case '+':
        {
            wynik=liczba + liczba2;
            pierwsze=false;
        }
          case '-':
        {
            wynik=liczba - liczba2;
            pierwsze=false;
        }

To jest zle rozwiazanie. 'break;' powoduje to, ze program wychodzi z biezacej petli / operacji warunkowej. Stosuj wiec to, w przeciwnym wypadku twoj program po wcisnieciu '+' wykona to, co jest w case '+', nastepnie nie wychodzac z petli zrobi to, co jest w '-' i tak bedzie robil az do skonczenia petli lub do napotkania 'return' badz 'break;'. Prawidlowo po kazdym case dawaj break; o tak:

 
case '+':
        {
            wynik=liczba + liczba2;
            pierwsze=false;
        }
        break;
          case '-':
        {
            wynik=liczba - liczba2;
            pierwsze=false;
        }
        break;

Jezeli chodzi o klikniecie 'x' - najlepiej obsluzyc zamykanie programu w samym case 'x'.

 
case 'x':
        {
        return 0;
        }
        break; //jak widzisz po kazdym case daje break;
        default:
        {
            cout << "zla wartosc" << endl;
            pierwsze= false;
        }
        break; //jak widzisz po kazdym case daje break;
    }
}

system("pause");
system("cls");
return main(); 
 
}

Jeszcze co do tego:

 
case 'c':
        {
        wynik=0;
        pierwsze= true;
        system("cls"); //wyczysc kosole
        return main(); //wroc do poczatku main()
        }
        break;

I ostatnie:
A co jesli przy wyborze opcji wpisze wiele znakow?
Ja 'cin >> znak' zamienilbym na 'znak = getch();'.
Wtedy pierwsyz znak jaki wpsizesz zapisuje sie do 'chara' i program sobie elci dalej (Masz mozliwosc wpisania tylko jednego znaku; to pozwoli ci wyeliminowac bledy).

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