Infinite loop on the switch

1

The problem is that in all three cases, cout repeats infinitely.

#include<iostream>
using namespace std;
#include<locale.h>

    int main(){
        setlocale(LC_ALL, "Portuguese");
        bool a;
        int consumo;
        cout << "Digite 1 -> até 100kw" << endl;
        cout << "Digite 2 -> de 101kw até 200kw" << endl;
        cout << "Digite 3 -> maior que 200kw" << endl;
        cin >> consumo;
        while(true){
             switch(consumo){
                case 1:
                    cout << "Parabéns, você é econômico." << endl;
                    break;
                case 2:
                    cout << "Cuidado, você está gastando muito." << endl;
                    break;
                case 3:
                    cout << "Que isso vei?" << endl;
                    break;
                default:
                    cout << "Valor inválido, tente novamente." << endl;
                    cout << "Digite 1 -> até 100kw" << endl;
                    cout << "Digite 2 -> de 101kw até 200kw" << endl;
                    cout << "Digite 3 -> maior que 200kw" << endl;
                    cin >> consumo;
                    continue;
            }
        }
    return 0;
    }
    
asked by anonymous 15.08.2018 / 22:52

2 answers

1

switch does not work so I I already answered the problem . break does not work as a loop break when it's inside case , can not use it. More on: Break and Continue on Switch .

You can redo this code by setting a if to know whether to exit or not, or you can use a goto , which many shiver , but there is no problem at all.

#include <iostream>
using namespace std;

int main() {
    while (true) {
        int consumo;
        cout << "Digite 1 -> até 100kw" << endl;
        cout << "Digite 2 -> de 101kw até 200kw" << endl;
        cout << "Digite 3 -> maior que 200kw" << endl;
        cin >> consumo;
        switch (consumo) {
        case 1:
            cout << "Parabéns, você é econômico." << endl;
            goto fim;
        case 2:
            cout << "Cuidado, você está gastando muito." << endl;
            goto fim;
        case 3:
            cout << "Que isso vei?" << endl;
            goto fim;
        }
    }
fim:
    return 0;
}

See running on ideone . And no Coding Ground . Also put it in GitHub for future reference .

Or you can do:

#include <iostream>
using namespace std;

int main() {
    while (true) {
        int consumo;
        cout << "Digite 1 -> até 100kw" << endl;
        cout << "Digite 2 -> de 101kw até 200kw" << endl;
        cout << "Digite 3 -> maior que 200kw" << endl;
        cin >> consumo;
        switch (consumo) {
        case 1:
            cout << "Parabéns, você é econômico." << endl;
            break;
        case 2:
            cout << "Cuidado, você está gastando muito." << endl;
            break;
        case 3:
            cout << "Que isso vei?" << endl;
            break;
        }
        if (consumo > 0 && consumo < 4) break;
    }
}

See running on ideone . And no Coding Ground . Also I put in GitHub for future reference .

A last form that is not exactly bad, but probably a little bit of nothing slower, which does not make any difference if so, is to change switch to if s.

I've used it to eliminate unnecessary duplication of code.

    
15.08.2018 / 22:56
0

Obviously it will be infinite loop, out of the switch is while(true) without any type of break , just take away that solves the problem.

You can also add break; after the switch if you want to keep while(true)

switch(consumo){
                case 1:
                    cout << "Parabéns, você é econômico." << endl;
                    break;
                case 2:
                    cout << "Cuidado, você está gastando muito." << endl;
                    break;
                case 3:
                    cout << "Que isso vei?" << endl;
                    break;
                default:
                    cout << "Valor inválido, tente novamente." << endl;
                    cout << "Digite 1 -> até 100kw" << endl;
                    cout << "Digite 2 -> de 101kw até 200kw" << endl;
                    cout << "Digite 3 -> maior que 200kw" << endl;
                    cin >> consumo;
                    continue;
            }break;

You need a break to stop switch and another break to stop while

    
15.08.2018 / 22:55