[英]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.