如用户即将使用cin函数输入内容,但过了一段时间后,它会强制用户按下回车键,但实际上按下回车键则会结束cin函数。有没有办法强制cin提交?
- Cin正在等待用户完成。
- 另一个线程调用一个表示cin必须结束的bool值。
- 即使用户没有完成打字,Cin也需要自行输入。
如用户即将使用cin函数输入内容,但过了一段时间后,它会强制用户按下回车键,但实际上按下回车键则会结束cin函数。有没有办法强制cin提交?
回车键的功能由shell程序实现,而C++标准库没有定义对它的任何控制。您需要发送一些进程间信号来获取shell,或者输出到cin
(在Unix上,由文件描述符1标识)的任何内容以清除其输出。
在Posix系统上提供交互式文本界面的常用方法是ncurses,但我还没有看到它与iostream一起使用。 (好吧,我根本不熟悉诅咒。)
我做了一些挖掘并找到了一种方法来做到这一点!
#include <windows.h>
INPUT input;
memset(&input,0,sizeof(input));
input.type = INPUT_KEYBOARD;
input.ki.wVk=VkKeyScanA('\n');
SendInput(1,&input,sizeof(INPUT));
input.ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(1,&input,sizeof(INPUT));
它刺激输入密钥或新行。
如这里看到http://www.dreamincode.net/forums/topic/153423-simulate-keyboard-press/
严,没有冒犯,但这不是一个好主意......你正在为你的本地问题使用一个全局解决方案(模拟击键),但最重要的是,你正在引入一个竞争条件 - 如果用户改变焦点到另一个窗口?输入按键将进入不相关的应用程序,并具有潜在的危险影响。如果您想在Windows上更好地控制控制台输入,只需使用控制台API和/或非阻塞IO。 –
是的,试过后我才注意到了。这是一个问题。我会试着看看其他解决方案。 – nurtul
退房诅咒库无缓冲的控制台I/O设备 –
有没有做到这一点,而不使用其他库的标准方式? – nurtul
@nurtul:不行,C++标准只是执行阻塞IO,而没有超时。 –