annoying problem

The program is running, but when the program ends (when I write the wrong option or x in the switch) it prints more than he should and does not close the screen. Why is this happening?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <conio.h>
using namespace std;

class Elevador {
      int andarAtual, andaresTotal, capacidadeElevador, numeroPassageiros;
      public:
             Elevador() {andarAtual = 0; numeroPassageiros = 0;}
             void iniciaElevador(int a, int b) {capacidadeElevador = a; andaresTotal = b;}
             void saiElevador();
             void entraElevador();
             void sobeUmAndar();
             void desceUmAndar();
             void Menu();
             void getMetodos();
};

void Elevador::Menu() {
     cout << "ELEVADOR (" << andaresTotal << " andares)\n\n"
          << "Movimentos:\n\n" 
          << "s: Subir um Andar\n"
          << "d: Descer um Andar\n"
          << "e: Entrar passageiro\n"
          << "f: Sair passageiro\n"
          << "x: FIM\n" << endl;
}

void Elevador:: getMetodos() {
           char ordem;
           cin >> ordem;
           switch (ordem) {
                  case ('s'):
                       sobeUmAndar();
                       getMetodos();
                  case ('d'):
                       desceUmAndar();
                       getMetodos();
                  case ('e'):
                       entraElevador();
                       getMetodos();
                  case ('f'):
                       saiElevador();
                       getMetodos();
                  default:
                       cout << "O elevador acabou no " << andarAtual << "o andar e com " << numeroPassageiros << " passageiros.";
                       break;
           };
}
         

void Elevador::sobeUmAndar() {
     if (andarAtual != andaresTotal) {
           andarAtual++;
           cout << "Subindo do " << andarAtual - 1 << "* andar para o " << andarAtual << "o." << endl;
     }
           else
               cout << "O elevador ja se encontra no ultimo andar." << endl;
}

void Elevador::desceUmAndar() {
     if (andarAtual == 0)
           cout << "O elevador ja se encontra no terreo." << endl;
           else {
                andarAtual--;
                cout << "Descendo " << andarAtual + 1 << "* andar para o " << andarAtual << "o." << endl;
           }
}

void Elevador::saiElevador() {
     if (numeroPassageiros != 0) {
           numeroPassageiros--;
           cout << "Saindo um passageiro. " << numeroPassageiros << " no momento." << endl;
     }
           else
                cout << "Nao ha nenhum passageiro para sair do elevador." << endl;
}
        

void Elevador::entraElevador() {
     if (numeroPassageiros == capacidadeElevador)
        cout << "Nao ha espaco para mais passageiros no elevador." << endl;
        else {
             numeroPassageiros++;
             cout << "Entrando um passageiro. " << numeroPassageiros << " no momento." << endl;
        }
}

int main () {
    Elevador Eleva;
    Eleva.iniciaElevador(8, 13);
    Eleva.Menu();
    Eleva.getMetodos();
    getch();
    return 0;
}
Last edited on
http://cplusplus.com/doc/tutorial/control/

look here- pay special attention to where the break; 's are used.
Topic archived. No new replies allowed.