下面的代码应该让我从菜单中选择一个选项,然后从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)