marek252 Temat założony przez niniejszego użytkownika |
switch wykonywane w pętli » 2013-11-24 13:54:00 Jest to mój pierwszy post, więc witam wszystkich. Jestem absolutnie początkujący. Mam problem z instrukcją switch. Chciałem, aby po naciśnięciu innego klawisza niż 1,2,3,4 pętla wykonywała się jeszcze raz, ale wtedy wariuje. Myślę, że jest coś nie tak z warunkiem. Mógłby ktoś poprawić? int main() { int wybor; cout << "Co chcesz zamowic?" << endl << "1. zupa" << endl << "2. drugie danie" << endl << "3. deser" << endl << "4. napoj" << endl << "Wybieram "; cin >> wybor; do { switch( wybor ) { case 1: cout << "Zamawiam zupe - 5 zł"; break; case 2: cout << "Zamawiam drugie danie - 12 zł"; break; case 3: cout << "Zamawiam deser - 4 zł"; break; case 4: cout << "Zamawiam napoj - 2 zł"; break; default: cout << "Nie mamy tego w menu. wybierz cos z listy. podaj numer "; cin >> wybor; } } while( wybor != 1 && 2 && 3 && 4 ); cout << endl; system( "pause" ); }
Pozdrawiam |
|
SeaMonster131 |
» 2013-11-24 13:57:25 Nie możesz tak napisać warunku, spróbuj w ten sposób: wybor != 1 && wybor != 2 &&...
|
|
marek252 Temat założony przez niniejszego użytkownika |
» 2013-11-24 14:04:33 Zrobiłem taki warunek while( wybor != 1 && wybor != 2 && wybor != 3 && wybor != 4 );
Gdy najpierw podam 1,2,3 lub 4 program działa poprawnie. Gdy najpierw podam inną liczbę, później znowu inną i znowu inną to również działa poprawnie, ale gdy najpierw podam inną a później 1,2,3 lub 4, to nie wyświetla tekstu co zostało wybrane. Dlaczego? edit: Już wiem czemu później nie wyświetla co zostało wybrane. To przez warunek. Chciałbym to tak zmienić aby w przypadku gdy najpierw wybierzemy klawisz inny niż 1,2,3,4 to program wyświetlał, że nie ma tego w menu a następnie gdy podamy klawisz 1,2,3 lub 4 to żeby wyświetlał co zostało wybrane. Jak to zrobić? |
|
kynol |
» 2013-11-24 14:24:50 ... Wiesz jak dziala petla do..while(); ? Chyba nie, wiec ci powiem, niezaleznie od tego czy warunek jest spelniony czy nie to petla i tak zawsze wykona sie 1x dopiero pozniej jest sprawdzany warunek, dlatego linijke cin >> wybor; przerzuc na sam poczatek petli i bedzie dzialac:)
@EDIT C++ nie obsluguje polskich znakow, dlatego zamien je na normalne, oczywiscie da sie tez zrobic tak zeby je obslugiwal ale tutaj to malo istotne:) |
|
leon_w |
» 2013-11-24 14:28:52 Daj warunek taki: while( wybor < 1 || wybor > 4 ); Pierwsze wprowadzanie danych (cin) daj po instrukcji "do", drugie cin usuń. apropos, wydaje mi sie, ze dajac znak && oczekujemy ze wszystkie warunki zostaną spełnione, a w tym przypadku możemy spełnić tylko jeden warunek naraz. |
|
kynol |
» 2013-11-24 14:37:57 @leon_w "apropos, wydaje mi sie, ze dajac znak && oczekujemy ze wszystkie warunki zostaną spełnione" Mozna uzyc znakow &&, zwroci on wartosc true jesli wszystkie warunki zostana spelnione, jesli chociaz jeden nie zostanie spelniony zwroci on wartosc false i sprawdzanie dalszych warunkow zostanie zaniechane ten warunek while( wybor < 1 || wybor > 4 );
rowniez jest poprawny, co kto woli :) @EDIT W gruncie rzeczy, czego by nie uzyl to jednak cin>>wybor musi przerzucic na poczatek petli, inaczej nie beda wyswietlane instrukcje w case'ach, dlatego wygodniej byloby tu uzyc petli while(); badz for(); |
|
leon_w |
» 2013-11-24 14:40:35 No fakt, po gruntownym przemyśleniu && też może być :D Pęta powtarza się, dopóki warunek jest różny od 1,2,3 i 4 |
|
marek252 Temat założony przez niniejszego użytkownika |
» 2013-11-24 15:16:19 Wiem jak działa pętla do while, nie wiem czemu coś Ci w niej nie pasowało. Po zmianie tak jak proponowaliście działa poprawnie. Rzeczywiście łatwiej to zrobić z while. Może komuś się przyda: int main() { int wybor; cout << "Co chcesz zamowic?" << endl << "1. zupa" << endl << "2. drugie danie" << endl << "3. deser" << endl << "4. napoj" << endl << "Wybieram "; cin >> wybor; while( wybor < 1 || wybor > 4 ) { cout << "Nie mamy tego w menu. Wybierz cos z listy. Podaj numer "; cin >> wybor; } switch( wybor ) { case 1: cout << "Zamawiam zupe - 5 zl"; break; case 2: cout << "Zamawiam drugie danie - 12 zl"; break; case 3: cout << "Zamawiam deser - 4 zl"; break; case 4: cout << "Zamawiam napoj - 2 zl"; break; } cout << endl; system( "pause" ); } Zastanawiam się tylko, czemu jeśli podam np. 1,3 albo 1,9 to traktuje jako 1 i wyświetla 1 opcje. I 1 warunek tego nie "wyłapuje". Można to jakoś zmienić? |
|
« 1 » 2 |