下面的代码应该让我从菜单中选择一个选项,然后从switch语句显示适当的行。仅当我选择选项“ g”时它才有效。如果我选择“ c”,它将显示cout行,但是会跳过循环并退出程序。我究竟做错了什么?

#include <iostream>
#include <cctype>

using namespace std;
enum {c='c', p='p', t='t', g='g'}; // 0-3

int main(){
    cout
            << "Elija una opcion del menu:" << endl
            << "c) carnivoros" << endl
            << "p) pianista" << endl
            << "t) Arbol" << endl
            << "g) Juegos" << endl;
    char eleccion;
    cin.get(eleccion);

    while (eleccion >= c && eleccion <= g){
            switch (eleccion)
            {
            case 'c' : cout << "Te gusta la carne e!\n"; break;
            case 'p' : cout << "Sos pianista?\n"; break;
            case 't' : cout << "Naturista!\n"; break;
            case 'g' : cout << "Vicio!\n"; break;
            }
            cout
                    << "Elija una opcion del menu:" << endl;
            cin.get(eleccion);
    }
_getche();
return 0;
}

最佳答案

(eleccion >= c && eleccion <= g)


这条线打断了它。

enum {c='c', p='p', t='t', g='g'}; // 0-3


枚举不会是c = 0 ... g = 3,但是它将是c = 99,p = 112,t = 116,g = 103,

因此,您的if将变成:

(eleccion >= 99 && eleccion <= 103)


112和116显然没有通过该条件。



同样,如LightningRacisinOrbit所指出的那样,换行符也会保留在缓冲区中,这会带来问题。解决方案是使用cin >> eleccion作为MikeMB建议。



您可以在if语句中将条件更改为

(eleccion >= c && eleccion <= t)


但是,它仍然非常难看。可能这是最好的:

(eleccion == c || eleccion == g || eleccion == p || eleccion == t)

10-07 13:37