繁体   English   中英

使用std :: cin输入停止while循环

[英]Stopping while-loop with std::cin input

我目前正在尝试创建一个仅在用户输入“退出”,“退出”或类似内容时才停止的循环。 我已经尝试了几种变体,但是我需要它来执行循环的其余部分,而不是停下来等待输入。

Running = true;
while(Running)
  {
    char c;
    std::cout << "test ";
    c = std::cin.peek(); 
    if(c=='Q'|| c=='q')
    {
    Running = false;
    }
  }

任何帮助将不胜感激。

除了peek()返回int_type ,不是char ...

...它从流中读取下一个字符,而无需实际提取它

由于您的cin确实,在这一点上, 不包含任何 (除非你通过管道输送的东西你的程序,或者已经输入的东西),调用将阻塞 ,直到要角色peek()版。

因为使用<iostream> ,您的程序直到按下Enter真正接收 输入 ,所以程序将执行以下操作:等待输入内容,然后按Enter

只有这样,它的程序检查您输入的第一个字符是“q”或“Q”。 您输入的 (包括第一个字符) 将保留在流中 -因此,下次您peek() ,它仍将是相同的字符。

解? C ++标准库中没有cin的无阻塞查询。 您要么必须使用线程,要么必须参考某些第三方输入处理(例如Microsoft Windows或NCurses库提供的getch()函数)。

就是这样做。

std::string input;
cin>>input;
while(input!="quit" && input!="Quit")
{
// do something;
// get input.
}

不知道你是什么意思

我需要它来执行循环的其余部分,而不是停止等待输入。

但是,如果将c=std::cin.peek()替换为std::cin >> c ,则会解决无限循环问题。

Running = true;
while (Running)
{
    char c; 
    std::cin >> c;
    std::cout << "test";

    if (c == 'Q' || c == 'q')
    {
        Running = false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM