使用 std::cin 输入停止 while 循环
Stopping while-loop with std::cin input
我目前正在尝试创建一个只有在用户输入 "quit"、"Quit" 或类似内容时才应停止的循环。我已经尝试了一些变体,但我需要它来执行循环的其余部分,而不是停下来等待输入。
Running = true;
while(Running)
{
char c;
std::cout << "test ";
c = std::cin.peek();
if(c=='Q'|| c=='q')
{
Running = false;
}
}
如有任何帮助,我们将不胜感激。
就这么简单
std::string input;
cin>>input;
while(input!="quit" && input!="Quit")
{
// do something;
// get input.
}
不确定
是什么意思
I need it to execute the rest of the loop and not stop to wait for an 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;
}
}
除了 peek()
返回 int_type
,而不是 char
...
...它reads the next character from the stream without actually extracting it.
由于您的 cin
在这一点上 不包含任何内容 (除非您将某些内容通过管道传输到您的程序,或者已经输入了某些内容),调用将 阻止直到是一个要peek()
编辑的角色。
因为使用 <iostream>
,您的程序实际上 接收 输入 ,直到您按下 Enter ,这就是您的程序所做的:等待直到您输入内容,然后按下 Enter。
仅然后程序会检查您输入的第一个字符是"q"还是"Q"。您输入的行,包括第一个字符,将保留在流中——所以下次您peek()
时,它将仍然是同一个角色。
解决方案? C++标准库中没有cin
的非阻塞查询。您要么必须使用线程,要么参考一些第三方输入处理(例如 Microsoft Windows 或 NCurses 库提供的 getch()
函数)。
我目前正在尝试创建一个只有在用户输入 "quit"、"Quit" 或类似内容时才应停止的循环。我已经尝试了一些变体,但我需要它来执行循环的其余部分,而不是停下来等待输入。
Running = true;
while(Running)
{
char c;
std::cout << "test ";
c = std::cin.peek();
if(c=='Q'|| c=='q')
{
Running = false;
}
}
如有任何帮助,我们将不胜感激。
就这么简单
std::string input;
cin>>input;
while(input!="quit" && input!="Quit")
{
// do something;
// get input.
}
不确定
是什么意思I need it to execute the rest of the loop and not stop to wait for an 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;
}
}
除了 peek()
返回 int_type
,而不是 char
...
...它reads the next character from the stream without actually extracting it.
由于您的 cin
在这一点上 不包含任何内容 (除非您将某些内容通过管道传输到您的程序,或者已经输入了某些内容),调用将 阻止直到是一个要peek()
编辑的角色。
因为使用 <iostream>
,您的程序实际上 接收 输入 ,直到您按下 Enter ,这就是您的程序所做的:等待直到您输入内容,然后按下 Enter。
仅然后程序会检查您输入的第一个字符是"q"还是"Q"。您输入的行,包括第一个字符,将保留在流中——所以下次您peek()
时,它将仍然是同一个角色。
解决方案? C++标准库中没有cin
的非阻塞查询。您要么必须使用线程,要么参考一些第三方输入处理(例如 Microsoft Windows 或 NCurses 库提供的 getch()
函数)。