Pętla case - program zawiesza się i nie może wyjść z case

0

Witam. Mam problem z zakończeniem case. Po skończeniu całego wyboru program się zawiesza i nie może wyjść z case. Poniżej podaje kod:

#include <cstdlib>
#include <iostream>

using namespace std;

void nazwa ()                                                                                                     
                                                                                                                                        
void baner ()
{                                                                                                             
  system (" cls ");                                        
  cout   <<"      |---------------------------------------------------------|      \n"
         <<"      | WPISZ NUMER | ABY WYBRAC ODPOWIEDNI NAPOJ | CENA NAPOJU |      \n"
         <<"      |---------------------------------------------------------|      \n"
         <<"      |      1      |   CAPPUCCINO Z CZEKOLADA    | 3 zl  00 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"
         <<"      |      2      |           ESPRESSO          | 2 zl  50 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"
         <<"      |      3      |         MALA CZARNA         | 2 zl  30 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"
         <<"      |      4      |        MALA Z MLEKIEM       | 2 zl  80 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"         
         <<"      |      5      |         DUZA CZARNA         | 3 zl  00 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"
         <<"      |      6      |        DUZA Z MLEKIEM       | 3 zl  50 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"
         <<"      |      7      |        ROZPUSZCZALNA        | 4 zl  00 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"         
         <<"      |      8      |      GORACA  CZEKOLADA      | 3 zl  50 gr |      \n"
         <<"      |---------------------------------------------------------|      \n"
         <<"      |      9      |      KONIEC  SYMULACJI      |             |      \n"
         <<"      |---------------------------------------------------------|      \n\n";
     
}

void cennik ()

{
  cout   <<"                     |---------------------------|                     \n"
         <<"                     | WPISZ | ABY WYBRAC MONETE |                     \n"
         <<"                     |---------------------------|                     \n"
         <<"                     |  0.1  |       10 gr       |                     \n"
         <<"                     |---------------------------|                     \n"
         <<"                     |  0.2  |       20 gr       |                     \n"
         <<"                     |---------------------------|                     \n"
         <<"                     |  0.5  |       50 gr       |                     \n"
         <<"                     |---------------------------|                     \n"
         <<"                     |   1   |       1 PLN       |                     \n"
         <<"                     |---------------------------|                     \n"
         <<"                     |   2   |       2 PLN       |                     \n"
         <<"                     |---------------------------|                     \n"
         <<"                     |   5   |       5 PLN       |                     \n"
         <<"                     |---------------------------|                     \n\n";         
}
                                                                                     
int main(int argc, char *argv[])                                                                 
                                                                                                    
{                                                                                                   
nazwa();
int x;
int y;
float dozaplaty;
float zaplacone;
float doplata;
int wybor;                                                                                                                                                                                    
char znak;                                                                                          
     do                                                                                                  
      {                                                                                                  
        baner ();
          cout << " Podaj numer wybranego napoju " << endl;        
          cin >> wybor;
                 switch (wybor)
                  {
                  case 1:
                       cout << "Nalezy sie 3 zl 00 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 3.00;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 3.00;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                  case 2:
                       cout << "Nalezy sie 2 zl 50 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 2.50;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 2.50;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                       case 3:
                       cout << "Nalezy sie 2 zl 30 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 2.30;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 2.30;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                       case 4:
                       cout << "Nalezy sie 2 zl 80 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 2.80;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 2.80;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                       case 5:
                       cout << "Nalezy sie 3 zl 00 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 3.00;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 3.00;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                       case 6:
                       cout << "Nalezy sie 3 zl 50 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 3.50;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 3.50;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                       case 7:
                       cout << "Nalezy sie 4 zl 00 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 4.00;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 4.00;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                       case 8:
                       cout << "Nalezy sie 3 zl 50 gr. Chcesz cukier? 0.10 gr za 1 gram. \n";
                       cout << "Jesli tak wpisz ile gramow jesli nie wpisz 0.\n";
                       cin >> y;
                       if (y > 0)
                       {
                       dozaplaty = (y * 0.10) + 3.50;
                       system (" cls ");
                       cout << "Razem zaplac " << dozaplaty << endl;
                       cout << "Monety przyjmowane: " << endl;
                       cennik ();
                       cout << "Monety wrzucone: " << endl;
                       cin >> zaplacone;
                       if (dozaplaty > zaplacone)
                         {
                           do
                            {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                            }
                              while (dozaplaty > zaplacone);
                         }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                       }    
                       else
                        {
                          dozaplaty = 3.50;
                          system (" cls ");
                          cout << "Razem zaplac " << dozaplaty << endl;
                          cout << "Monety przyjmowane: " << endl;
                          cennik ();
                          cout << "Monety wrzucone: " << endl;
                          cin >> zaplacone;
                          if (dozaplaty > zaplacone)
                           {
                           do
                             {
                              cout << "Malo zaplacone, doplac " << dozaplaty - zaplacone << endl;
                              cout << "Wrzucam: ";
                              cin >> doplata;
                              zaplacone = zaplacone + doplata;
                             }
                              while (dozaplaty > zaplacone);
                           }
                              if (zaplacone > dozaplaty);
                              cout<< "Wydaje reszte: " << zaplacone - dozaplaty << endl;
                        }    
                  break;
                  case 9: ; 
                 } 
                 while ((wybor > 0) && (wybor < 9));
        cout << "Czy chcesz inny napoj? (T/N)" << endl;
        cin >> znak;
        cout << endl;      
      }
 while (znak=='T' || znak=='t');
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
}

dodanie znacznika <code class="cpp"> - furious programming

1
case 9: return EXIT_SUCCESS;
0

Niestety nadal nie działa. Zauważyłem jednak że po EXIT w każdym case wyłącza się program. Mi chodzi o to żeby po wykonaniu case spytał sie o kolejny wybór. Z góry dziękuje

0

W takim razie nie tam wstawiłeś to co zaproponowałem, ponieważ return w main skończy program definitywnie.
Może jakoś przypadkiem zastąpiłeś sobie << na < i teraz program ci nie kompiluje się zaś IDE odpala starą wersje.

0

Jak zrobiłem w case 9 tam gdzie zaproponowałeś nic nie zmieniło się w stosunku do wcześniejszej wersji a skompilowałem w innym programie.

0

Sformatuj sobie ten kod poprawnie, i dokładnie przeanalizuj, co się gdzie dzieje, ile razy i dlaczego.

0

Czy rozumiesz że kod który podałeś nie da się skompilować?
Nic dziwnego że nić się nie zmieniło ponieważ przed tym miałeś niekompilujący się kod a teraz nadal masz niekompilujący się kod.

0

Rozumiem to gdzie szukać błędu w cout??

0

Już ci to napisałem tu: http://4programmers.net/Forum/C_i_C++/234532-petla_case?p=1038454#id1038454
Mów którego słowa nie rozumiesz.

0

Może jakoś przypadkiem zastąpiłeś sobie << na <. O co w tym chodzi?

0

Ja zastąpiłem? W całym kodzie wszędzie używasz operatora < do cout'a

Aha już widzę wkleiłeś bez znaczników więc skrypt wyciął to, więc chrzani waść wpisanie 9 wychodzi z programu: http://ideone.com/qKZOy9

0

nie wiem co Ci nie działa, bo nie chciało mi się czytać tych wypocin, ale wiem, że taki kod:

char znak;
cin >> znak;

nie zadziała Ci prawie nigdy tak jak chcesz. Jeśli przed tym wczytywałeś liczbę to Twoim wczytanym znakiem będzie enter. Zamień char na string to pominie Ci białe znaki albo skorzystaj z cin.ignore

0

Wiem że podczas wciśnięcia 9 wychodzi z programu. Chodzi o to że jak wybierzesz np 1 i dokończysz symulacje program się zawiesza zamiast dojść do pytania czy chcesz kontynuować.

0

Co znaczy "się zawiesza"?
może o to ci chodzi:

cin >> std::ws >> znak; // nie zapomnieć o <iomanip>
0

Weź go sobie odpal to zobaczysz o co mi chodzi.

0

A ja sobie skopiowałem ten kod, zmieniłem < na <<, sformatowałem, przyjrzałem się {} i przeniosłem to i owo, i działa poprawnie. No nie, skandal. Szczególnie, że nie mogę powiedzieć, iż znam dobrze C czy C++ :)

0

Weź daj w łeb temu kto ci do kodu dopisał while ((wybor > 0) && (wybor < 9)); bo widzę że zupełnie nie rozumiesz co ten fragment robi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1