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

Problem z instrukcją switch

Ostatnio zmodyfikowano 2016-07-22 22:02
Autor Wiadomość
Eloxxx
Temat założony przez niniejszego użytkownika
Problem z instrukcją switch
» 2016-07-22 00:30:39
Witam! Jestem początkujący jeśli chodzi o programowanie, zapoznałem się z kilkoma instrukcjami i funkcjami warunkowymi, w moim programie (bankomat) chciałem uzyc instrukcji switch do wybierania spośród wielu opcji wyplacania etc. Niestety w moim programie jest pewne niedociągnięcie, którego nie jestem w stanie zlokalizować i naprawić. Chodzi o to, że w momencie gdy wybieram spośród 2 opcji 1. Wyplacanie 2. Wplacanie i wpisze 3 to wyskakuje mi cout z zupełnie innego case'a, a gdy juz wybiore 1 czyli wyplacanie to gdy wybiore 3 to pojawia mi sie case 2 a nie tak jak chcialem 3, jeśli ktos rozumie to super :D Proszę o pomoc a poniżej zamieszczam kod:

C/C++
#include <iostream>

using namespace std;

string PIN;
int prob = 4;
int wybor;
int opcja;
int main() {
    cout << "Witaj w naszym banku!" << endl;
    cout << "Podaj kod PIN: ";
    cin >> PIN;
   
    if( PIN == "1729" )
    {
        cout << "Twoj kod PIN jest poprawny!" << endl;
        cout << "MENU OPCJI" << endl;
        cout << "-------------" << endl;
        cout << "1. Wyplacanie pieniedzy" << endl;
        cout << "2. Wplacanie pieniedzy" << endl;
        cout << "Wybierz: ";
        cin >> wybor;
       
        switch( wybor )
        {
        case 1:
            {
                cout << "Wybierz kwote jaka chcesz wyplacic" << endl;
                cout << "1. 50 zl" << endl;
                cout << "2. 100 zl" << endl;
                cout << "3. 200 zl" << endl;
                cout << "4. 300 zl" << endl;
                cout << "5. 400 zl" << endl;
                cout << "Wybierz: " << endl;
                cin >> opcja;
            }
           
            {
                switch( opcja )
                {
                case 1:
                    {
                        cout << "Wyplacono 50 zl!" << endl;
                    }
                   
                    {
                        cout << "Zyczymy milego dnia!" << endl;
                    }
                    break;
                }
                {
                case 2:
                    {
                        cout << "Wyplacono 100 zl!" << endl;
                    }
                   
                    {
                        cout << "Zyczymy milego dnia!" << endl;
                    }
                    break;
                }
               
                {
                case 3:
                    {
                        cout << "Wyplacono 200 zl!" << endl;
                    }
                   
                    {
                        cout << "Zyczymy milego dnia!" << endl;
                    }
                    break;
                }
               
            }
           
            {
               
            case 4:
                {
                    cout << "Wyplacono 300 zl!" << endl;
                }
               
                {
                    cout << "Zyczymy milego dnia!" << endl;
                }
               
                break;
            }
            {
            case 5:
                {
                    cout << "Wyplacono 400 zl!" << endl;
                }
               
                {
                    cout << "Zyczymy milego dnia!" << endl;
                }
                break;
            }
           
           
           
           
            break;
            default: cout << "Nie ma takiej opcji w menu!" << endl;
        }
    }
   
   
   
   
   
    else
    do
    {
        prob--;
        cout << "Bledny kod PIN! Pozostalo " << prob << " prob. Sprobuj ponownie ";
        cin >> PIN;
       
        if( PIN == "1729" )
        {
            cout << "Twoj kod PIN jest poprawny!";
            return 0;
        }
       
    } while( prob >= 2 );
   
    if( prob == 1 )
    {
        cout << "Twoje konto zostalo zablokowane!";
    }
   
    return 0;
}


   
P-150197
michal11
» 2016-07-22 01:57:01
Że to ci się w ogóle kompiluje to ja się dziwię. Popraw formatowanie kodu, wygląda jak byś wrzucał nawiasy klamrowe w losowych miejscach. Uporządkuj kod to powinno wyjść dlaczego nie działa tak jak tego oczekujesz.
P-150198
karambaHZP
» 2016-07-22 09:04:23
C/C++
#include <iostream>
#include <string>

using namespace std;

int main() {
    string PIN;
    int prob = 3;
    int wybor;
    int opcja;
   
    cout << "Witaj w naszym banku!" << endl;
    cout << "Podaj kod PIN: ";
    cin >> PIN;
   
    if( PIN == "1729" )
    {
        cout << "Twoj kod PIN jest poprawny!" << endl;
        cout << "MENU OPCJI" << endl;
        cout << "-------------" << endl;
        cout << "1. Wyplacanie pieniedzy" << endl;
        cout << "2. Wplacanie pieniedzy" << endl;
        cout << "Wybierz: ";
        cin >> wybor;
       
        switch( wybor ) {
        case 1:
            cout << "Wybierz kwote jaka chcesz wyplacic" << endl;
            cout << "1. 50 zl" << endl;
            cout << "2. 100 zl" << endl;
            cout << "3. 200 zl" << endl;
            cout << "4. 300 zl" << endl;
            cout << "5. 400 zl" << endl;
            cout << "Wybierz: " << endl;
            cin >> opcja;
           
            switch( opcja ) {
            case 1:
                cout << "Wyplacono 50 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 2:
                cout << "Wyplacono 100 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 3:
                cout << "Wyplacono 200 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 4:
                cout << "Wyplacono 300 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 5:
                cout << "Wyplacono 400 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl; break;
            default:
                cout << "Nie ma takiej opcji w menu!" << endl;
            }
            break;
        case 2:
            // menu wplacania
        default:
            cout << "Nie ma takiej opcji w menu!" << endl;
        }
    }
    else
    {
        do
        {
            cout << "Bledny kod PIN! Pozostalo " << prob << " prob. Sprobuj ponownie ";
            cin >> PIN;
            prob--; // predekrementacja zamiast postdekrementacji
            if( PIN == "1729" )
            {
                cout << "Twoj kod PIN jest poprawny!";
                return 0; // wyjście z programu
            }
        } while( prob > 0 ); // tutaj powinien być checkPin
       
        if( prob == 1 ) {
            cout << "Twoje konto zostalo zablokowane!";
        }
    }
    return 0;
}
Zmiennych globalnych używamy, gdy nie ma innego wyjścia (samo zło - źródło problemów).
W
case
'ach nie trzeba używać klamer, jeśli nic w nich nie deklarujemy.
W twoim kodzie było ich zdecydowanie za dużo.


C/C++
{
    cout << "Wyplacono 50 zl!" << endl;
}

{
    cout << "Zyczymy milego dnia!" << endl;
}
Takie coś nie ma żadnego sensu.
P-150199
Eloxxx
Temat założony przez niniejszego użytkownika
» 2016-07-22 18:47:46
Okej dzięki za pomoc karambaHZP. Ulepszyłem trochę program, dodałem wiad., że masz tylko 200 zl i jakakolwiek proba wyplacenia wiekszej kwoty od 200 spowoduje wiadomosc ze nie masz tyle pieniedzy na koncie.
Kod wygląda teraz tak:

C/C++
#include <iostream>
#include <string>

using namespace std;

int main() {
    string PIN;
    int prob = 3;
    int wybor;
    int opcja;
    int opcja2;
    string IND;
   
    cout << "Witaj w naszym banku!" << endl;
    cout << "Podaj indetyfikator: " << endl;
    cin >> IND;
    cout << "Podaj kod PIN: " << endl;
    cin >> PIN;
   
   
    if(( PIN == "1729" ) &&( IND == "13377331" ) )
    {
        cout << "Twoj kod PIN i identyfikator sa poprawne!" << endl;
        cout << "Masz na koncie 200 zl!" << endl;
        cout << "MENU OPCJI" << endl;
        cout << "-------------" << endl;
        cout << "1. Wyplacanie pieniedzy" << endl;
        cout << "2. Wplacanie pieniedzy" << endl;
        cout << "Wybierz: ";
        cin >> wybor;
       
        switch( wybor ) {
        case 1:
            cout << "Wybierz kwote jaka chcesz wyplacic" << endl;
            cout << "1. 50 zl" << endl;
            cout << "2. 100 zl" << endl;
            cout << "3. 200 zl" << endl;
            cout << "4. 300 zl" << endl;
            cout << "5. 400 zl" << endl;
            cout << "Wybierz: " << endl;
            cin >> opcja;
           
            switch( opcja ) {
            case 1:
                cout << "Wyplacono 50 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 2:
                cout << "Wyplacono 100 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 3:
                cout << "Wyplacono 200 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 4:
                cout << "Nie masz tyle pieniedzy na koncie!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 5:
                cout << "Nie masz tyle pieniedzy na koncie!" << endl;
                cout << "Zyczymy milego dnia!" << endl; break;
            default:
                cout << "Nie ma takiej opcji w menu!" << endl;
            }
            break;
           
           
           
           
        case 2:
            cout << "Wybierz kwote jaka chcesz wplacic" << endl;
            cout << "1. 50 zl" << endl;
            cout << "2. 100 zl" << endl;
            cout << "3. 200 zl" << endl;
            cout << "4. 300 zl" << endl;
            cout << "5. 400 zl" << endl;
            cout << "Wybierz: " << endl;
            cin >> opcja2;
           
            switch( opcja2 ) {
            case 1:
                cout << "Pomyslnie wplacono 50 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 2:
                cout << "Pomyslnie wplacono 100 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 3:
                cout << "Pomyslnie wplacono 200 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 4:
                cout << "Pomyslnie wplacono 300 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            case 5:
                cout << "Pomyslnie wplacono 400 zl!" << endl;
                cout << "Zyczymy milego dnia!" << endl;
                break;
            default:
                cout << "Nie ma takiej opcji w menu!" << endl;
            }
            break;
            default:
            cout << "Nie ma takiej opcji w menu!" << endl;
           
           
           
           
        }
    }
    else
    {
        do
        {
            cout << "Bledny kod PIN!" << endl;
            cout << "Pozostalo " << prob << " prob. Sproboj ponownie!" << endl;
            cout << "Podaj identyfikator: ";
            cin >> IND;
            cout << "Podaj PIN: ";
            cin >> PIN;
            prob--; // predekrementacja zamiast postdekrementacji
            if(( PIN == "1729" ) &&( IND == "13377331" ) )
            {
                cout << "Twoj kod PIN i identyfikator sa poprawne!" << endl;
                cout << "Masz na koncie 200 zl!";
                cout << "MENU OPCJI" << endl;
                cout << "-------------" << endl;
                cout << "1. Wyplacanie pieniedzy" << endl;
                cout << "2. Wplacanie pieniedzy" << endl;
                cout << "Wybierz: ";
                cin >> wybor;
               
                switch( wybor ) {
                case 1:
                    cout << "Wybierz kwote jaka chcesz wyplacic" << endl;
                    cout << "1. 50 zl" << endl;
                    cout << "2. 100 zl" << endl;
                    cout << "3. 200 zl" << endl;
                    cout << "4. 300 zl" << endl;
                    cout << "5. 400 zl" << endl;
                    cout << "Wybierz: " << endl;
                    cin >> opcja;
                   
                    switch( opcja ) {
                    case 1:
                        cout << "Wyplacono 50 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 2:
                        cout << "Wyplacono 100 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 3:
                        cout << "Wyplacono 200 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 4:
                        cout << "Nie masz tyle pieniedzy na koncie!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 5:
                        cout << "Nie masz tyle pieniedzy na koncie!" << endl;
                        cout << "Zyczymy milego dnia!" << endl; break;
                    default:
                        cout << "Nie ma takiej opcji w menu!" << endl;
                    }
                    break;
                   
                   
                case 2:
                    cout << "Wybierz kwote jaka chcesz wplacic" << endl;
                    cout << "1. 50 zl" << endl;
                    cout << "2. 100 zl" << endl;
                    cout << "3. 200 zl" << endl;
                    cout << "4. 300 zl" << endl;
                    cout << "5. 400 zl" << endl;
                    cout << "Wybierz: " << endl;
                    cin >> opcja2;
                   
                    switch( opcja2 ) {
                    case 1:
                        cout << "Pomyslnie wplacono 50 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 2:
                        cout << "Pomyslnie wplacono 100 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 3:
                        cout << "Pomyslnie wplacono 200 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 4:
                        cout << "Pomyslnie wplacono 300 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    case 5:
                        cout << "Pomyslnie wplacono 400 zl!" << endl;
                        cout << "Zyczymy milego dnia!" << endl;
                        break;
                    default:
                        cout << "Nie ma takiej opcji w menu!" << endl;
                    }
                    break;
                    default:
                    cout << "Nie ma takiej opcji w menu!" << endl;
                   
                   
                   
                   
                }
                return 0; // wyjście z programu
            }
        } while( prob > 0 ); // tutaj powinien być checkPin
       
        if( prob == 1 ) {
            cout << "Twoje konto zostalo zablokowane!";
        }
    }
    return 0;
}


Chciałbym posunąć się o krok dalej i stworzyć program, który będzie wyświetlał ilość pieniędzy na koncie jaką mielismy ostatnim razem. Żeby to wytłumaczyć: Otwieram program i mam informację, że mam 0 zł, mogę jedynie wpłacić pieniądze niech PK to będzie - pieniądze teraz na koncie, żeby program działał muszę dodać w case'ach  (chyba) To jest case 2 z wypłatą 100 zl:
 if(PK <100
 cout Nie masz tyle pieniedzy na koncie

 else if
 cout Wyplacono 100 zl

Oby tak sie dalo bo mowie swoją przygodę z c++ zacząłem 3 dni temu z nudów.

I teraz (wiem ze to trudno zrozumiec) jak wplace np. 200 zl to int PK zmieni wartosc na 200 cnie. Czy da się zrobic tak zeby program po zamknięciu sie zapisal z wartosciami jakie byly czyli np jak wplace 300 zl to sie zamknie i jak go znowu włącze to wartosc PK bedzie 300 zl a nie znowu 0? Jest wgl cos takiego?

Proszę o pomoc i najlepiej o wytłumaczenie czy to wgl możliwe i czy z tymi if'ami u góry tez bedzie ok ^^

P-150205
carlosmay
» 2016-07-22 22:02:04
Na tym etapie znajomości programowania będzie cię czekać trudne zadanie i kilometrowy kod.

Proponuję porobić zadania z tego kursu.
Poznać dzielenie programu na funkcje, klasy itd. To ułatwi zarządzanie kodem.

Co do zachowania danych do następnej sesji, warto poznać pracę z plikami (zapis i odczyt).

Jeszcze jedna sugesia: używaj sugestywnych nazw (nie wiem co to IND bez analizy większego fragmentu kodu)
tj. numerIdentyfikacyjnyKlienta. Nazwa jest dłuższa, ale od razu wiadomo co przedstawia.
P-150207
« 1 »
  Strona 1 z 1