Problem z instrukcją switch
Ostatnio zmodyfikowano 2016-07-22 22:02
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: #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; }
|
|
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. |
|
karambaHZP |
» 2016-07-22 09:04:23 #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: default: cout << "Nie ma takiej opcji w menu!" << endl; } } else { do { cout << "Bledny kod PIN! Pozostalo " << prob << " prob. Sprobuj ponownie "; cin >> PIN; prob--; if( PIN == "1729" ) { cout << "Twoj kod PIN jest poprawny!"; return 0; } } while( prob > 0 ); 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. { cout << "Wyplacono 50 zl!" << endl; }
{ cout << "Zyczymy milego dnia!" << endl; }
|
Takie coś nie ma żadnego sensu. |
|
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: #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--; 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; } } while( prob > 0 ); 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 ^^ |
|
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. |
|
« 1 » |