Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使循环正常工作_C++ - Fatal编程技术网

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 <<

下面的代码允许我从菜单中选择一个选项,然后显示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;
}
#包括
#包括
使用名称空间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;
    }