Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ pętla do...while działa tylko podczas pierwszego wyboru w switch case

Ostatnio zmodyfikowano 2014-02-05 17:57
Autor Wiadomość
Robek94
Temat założony przez niniejszego użytkownika
C++ pętla do...while działa tylko podczas pierwszego wyboru w switch case
» 2014-02-05 15:17:23
Próbuje napisać kalkulator matematyczny liczący nie tylko działania ale i pola figur.

Na początku kiedy wybierze się liczbę większą niż 2 (na początku można wybrać: [1]kalkulator, [2]kwadrat) pojawia się napis "Liczba niepoprawna podaj od 1 do 2".
Oczywiście jeśli wybierze się 1 lub 2 działa jak należy.

Problem w tym, że pętla odpowiadająca za "Liczbę niepoprawną" działa tylko na początku. Dalej są zastosowane 2 takie pętle i niestety po wpisaniu niepoprawnej liczby program przechodzi do "Co dalej [1]licz dalej, [2]zakończ.

Proszę o pomoc.

 
C/C++
#include <iostream>
#include <cstdlib>
#include <windows.h>

using namespace std;

int main()
{
    HANDLE hOut;
    hOut = GetStdHandle( STD_OUTPUT_HANDLE );
   
    int wybor, liczba, liczba2, liczba3, koniec;
   
    float a, b; // ------------------------------------DANE
   
    do
    {
        SetConsoleTextAttribute( hOut, BACKGROUND_RED ); //CZERWONE TLO
        cout << "KALKULATOR\n\n";
       
        SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED ); //STANDARDOWY
       
        cout << "\n[1] - kalkulator" << "\n[2] - obwod kwadratu" << "\n\nPodaj numer: ";
        cin.clear();
        cin.sync();
        cin >> liczba;
       
        if( liczba > 2 )
       
        do
        {
            cout << "\n\nNumer niepoprawny.\n\nPodaj numer od 1 do 2: ";
            cin.clear();
            cin.sync();
            cin >> liczba;
        }
       
        while( liczba > 2 );
       
        switch( liczba )
        {
        case 1: // kwadrat
            {
                cout << "\n[1] - dodawanie " << "\n[2] - odejmowanie" << "\n[3] - mnozenie" << "\n[4] - dzielenie" << "\n\nPodaj numer: ";
                cin.clear();
                cin.sync();
                cin >> liczba2;
               
                if( liczba > 4 )
               
                do
                {
                    cout << "\n\nNumer niepoprawny.\nPodaj numer od 1 do 4: ";
                    cin.clear();
                    cin.sync();
                    cin >> liczba2;
                }
               
                while( liczba > 4 );
               
                switch( liczba2 )
                {
                case 1: // dodawanie
                    {
                        cout << "\n*******************************************\n\t\tDODAWANIE\n*******************************************\n" << "\nPierwsza liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> a;
                        cout << "Druga liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> b;
                        cout << "\nWynik: " << a + b << "\n-------------------------------------------\n\n\n";
                        break;
                    }
                   
                   
                case 2: // odejmownaie
                    {
                        cout << "\n*******************************************\n\t\tODEJMOWANIE\n*******************************************\n" << "\nPierwsza liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> a;
                        cout << "Druga liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> b;
                        cout << "\nWynik: " << a - b << "\n-------------------------------------------\n\n\n";
                        break;
                    }
                   
                   
                case 3: // mnozenie
                    {
                        cout << "\n*******************************************\n\t\tMNOZENIE\n*******************************************\n" << "\nPierwsza liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> a;
                        cout << "Druga liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> b;
                        cout << "\nWynik: " << a * b << "\n-------------------------------------------\n\n\n";
                        break;
                    }
                   
                   
                case 4: // dzielenie
                    {
                        cout << "\n*******************************************\n\t\tDZIELENIE\n*******************************************\n" << "\nPierwsza liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> a;
                        cout << "Druga liczba: ";
                        cin.clear();
                        cin.sync();
                        cin >> b;
                       
                        if( b == 0 )
                       
                        do
                        {
                            cout << "\nNie mozna dzielic przez 0. \nPodaj inna liczbe: ";
                            cin.clear();
                            cin.sync();
                            cin >> b;
                        }
                       
                        while( b == 0 );
                       
                        cout << "\nWynik: " << a / b << "\n-------------------------------------------\n\n\n";
                        break;
                    }
                   
                }
               
                break;
            }
           
        case 2:
            {
                cout << "\n[1] - obwod" << "\n[2] - pole" << "\n\nPodaj numer: ";
                cin.clear();
                cin.sync();
                cin >> liczba3;
               
                if( liczba > 2 )
               
                do
                {
                    cout << "\n\nNumer niepoprawny.\nPodaj numer od 1 do 2: ";
                    cin.clear();
                    cin.sync();
                    cin >> liczba3;
                }
               
                while( liczba > 2 );
               
                switch( liczba3 )
                {
                case 1: // obwod
                    {
                        cout << "\n*******************************************\n\t\tOBWOD KWADRATU\n*******************************************\n" << "\nPodaj a: ";
                        cin.clear();
                        cin.sync();
                        cin >> a;
                        cout << "\nWynik: " << 4 * a << "\n-------------------------------------------\n\n\n";
                        break;
                    }
                   
                case 2: // pole
                    {
                        cout << "\n*******************************************\n\t\tPOLE KWADRATU\n*******************************************\n" << "\nPodaj a: ";
                        cin.clear();
                        cin.sync();
                        cin >> a;
                        cout << "\nWynik: " << a * a << "\n-------------------------------------------\n\n\n";
                        break;
                    }
                }
               
                break;
            }
           
        }
       
        cout << "\n*******************************************\n\t\tCO TERAZ?\n*******************************************\n";
        cout << "\n[1] - licz dalej\n[2] - zakoncz \n\nCo wybierasz: ";
        cin >> koniec;
        system( "cls" );
    }
   
    while( koniec != 2 );
   
    return 0;
}[ / code ]
P-104037
alixir
» 2014-02-05 17:16:54
W dalszej części wczytujesz do zmiennej "liczba2", ale warunki i pętle nadal opierają się na zmiennej "liczba"
P-104054
Robek94
Temat założony przez niniejszego użytkownika
» 2014-02-05 17:57:07
Serdecznie dziękuję za pomoc. Aż wstyd było pytać o taki banał.
P-104056
« 1 »
  Strona 1 z 1