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

时间:2015-03-18 14:00:18

标签: c++ while-loop cin

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

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

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

... reads the next character from the stream without actually extracting it

由于您的cin确实存在,此时不包含任何内容(除非您将某些内容传输到您的程序或已经输入了某些内容),该调用将阻止直到 一个字符为peek() ed。

由于使用<iostream>,您的程序实际上接收输入,直到您按 Enter ,这就是您的程序确实:在您输入内容之前等待,然后按 Enter

只有然后程序会检查您输入的第一个字符是否为&#34; q&#34;或&#34; Q&#34;。您输入的,包括第一个字符将保留在流中 - 所以下次peek()时,它仍然是同一个字符

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

答案 1 :(得分:0)

就这样做。

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

答案 2 :(得分:0)

不确定你的意思

  

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

但如果您将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;
    }
}