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

switch wykonywane w pętli

Ostatnio zmodyfikowano 2013-11-24 22:09
Autor Wiadomość
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ć?
C/C++
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
P-97282
SeaMonster131
» 2013-11-24 13:57:25
Nie możesz tak napisać warunku, spróbuj w ten sposób:
C/C++
wybor != 1 && wybor != 2 &&...
P-97284
marek252
Temat założony przez niniejszego użytkownika
» 2013-11-24 14:04:33
Zrobiłem taki warunek
C/C++
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ć?
P-97287
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:)
P-97291
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.
P-97292
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
C/C++
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();
P-97298
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
P-97299
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:
C/C++
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;
        //nie daje default, bo juz waruenk przy while uwzglednia inne mozlliwosci
    }
   
    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ć?
P-97309
« 1 » 2
  Strona 1 z 2 Następna strona