我正在尝试创建一个循环,只有在用户输入“退出”,“退出”或类似内容时才会停止。我已经尝试了一些变化,但我需要它来执行循环的其余部分而不是停止等待输入。
Running = true;
while(Running)
{
char c;
std::cout << "test ";
c = std::cin.peek();
if(c=='Q'|| c=='q')
{
Running = false;
}
}
非常感谢任何帮助。
答案 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;
}
}