C++ 无法使循环正常工作
下面的代码允许我从菜单中选择一个选项,然后显示switch语句中的相应行。它只在我选择选项“g”时起作用。如果我选择“c”,它将显示C++ 无法使循环正常工作,c++,C++,下面的代码允许我从菜单中选择一个选项,然后显示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 <<
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;
}
#包括
#包括
使用名称空间std;
枚举{c='c',p='p',t='t',g='g'};//0-3
int main(){
库特
枚举不是c=0…g=3,而是c=99,p=112,t=116,g=103
因此,您的if将变成:
(eleccion >= 99 && eleccion <= 103)
但是它仍然很丑陋。也许这是最好的:
(eleccion == c || eleccion == g || eleccion == p || eleccion == t)
枚举不是c=0…g=3,而是c=99,p=112,t=116,g=103
因此,您的if将变成:
(eleccion >= 99 && eleccion <= 103)
但是它仍然很丑陋。也许这是最好的:
(eleccion == c || eleccion == g || eleccion == p || eleccion == t)
您的代码中有两个问题:
cin.get(eleccion);
不会从输入流中清除新行字符,因此下一次调用cin.get
时,它将读取新行字符,该字符超出您指定的范围,并将终止循环。请改用cin>>eleccion;
来修复该问题
将ASCII字母分配给枚举时,bigges枚举不是g
,而是t
,因此循环头应如下所示:
while ( c <= eleccion && eleccion <= t){
您的代码中有两个问题:
cin.get(eleccion);
不会从输入流中清除新行字符,因此下一次调用cin.get
时,它将读取新行字符,该字符超出您指定的范围,并将终止循环。请改用cin>>eleccion;
来修复该问题
将ASCII字母分配给枚举时,bigges枚举不是g
,而是t
,因此循环头应如下所示:
while ( c <= eleccion && eleccion <= t){
@数字忍者:那不相关。“还有”“天哪”“德”“不知道”“什么”-你的第一语言是什么并不重要;检查你的写作只需要几分钟的努力。如果你能养成使用书面语言的习惯,那么你也会养成使用计算机语言的习惯,你会成为一名更好的程序员!那是什么呢?这个问题与那完全不同。这是失败正在初始化,因为枚举中的字符已转换为int。(eleccion>=c&&eleccion@LightningRacisinObrit:这不完全是你链接的帖子的重复。请不要这样标记。是的,OP的英语不是很好,但理解起来并不难。如果你对OP的调试量或他们的代码质量有问题,我会理解的。@DigitalNinja:那不相关。”还有“天哪”“不知道”是什么意思-你的第一语言是什么并不重要;检查你的写作只需要几分钟的努力。如果你能养成使用书面语言的习惯,那么你也会养成使用计算机语言的习惯,你会成为一名更好的程序员!那是什么呢?这个问题与那完全不同。这是失败正在初始化,因为枚举中的字符已转换为int。(eleccion>=c&&eleccion@LightningRacisinObrit:这不完全是你链接的帖子的重复。请不要这样标记。是的,OP的英语不是很好,但理解起来并不难。如果你对OP所做的调试量或他们的代码质量有问题,我会理解的。你可以有+1,因为你是唯一一个这样做的人n正确答案。不过,这个答案还是可以改进的!好的,非常感谢,还进行了闪电Racis轨道按摩=)我试过了,但lady Lighting通过对我的问题进行向下投票,取消了我的提问。我还是爱她。干杯?你可以接受答案(点击勾号)据我所知,有0次重复。=0,我想没有,我的自我状态在地板上,呵呵=/你可以有+1,因为你是唯一正确的人。不过,这个答案还是可以改进的!好的,它工作了,非常感谢,还使用了Lighting Racis Orbit chirtics=)我试过了,但lady Lighting通过对我的问题进行否决而取消了我的发言权。无论如何,我爱她。干杯?据我所知,你可以接受0次重复的回答(点击勾号)。=0,我想不是,我的自尊心在地板上,呵呵=/
using namespace std;
//enums are not needed
int main(){
cout << "Opciones:" << endl
<< "c) carnivoros" << endl
<< "p) pianista" << endl
<< "t) Arbol" << endl
<< "g) Juegos" << endl;
bool rightChar = true;
while (rightChar){
cout << "Elija una opcion del menu:" << endl;
char eleccion;
cin >> eleccion;
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;
default: rightChar = false;
}
}
return 0;
}