2013-12-15 157 views
1

如用户即将使用cin函数输入内容,但过了一段时间后,它会强制用户按下回车键,但实际上按下回车键则会结束cin函数。有没有办法强制cin提交?

  1. Cin正在等待用户完成。
  2. 另一个线程调用一个表示cin必须结束的bool值。
  3. 即使用户没有完成打字,Cin也需要自行输入。
+1

退房诅咒库无缓冲的控制台I/O设备 –

+0

有没有做到这一点,而不使用其他库的标准方式? – nurtul

+0

@nurtul:不行,C++标准只是执行阻塞IO,而没有超时。 –

回答

2

回车键的功能由shell程序实现,而C++标准库没有定义对它的任何控制。您需要发送一些进程间信号来获取shell,或者输出到cin(在Unix上,由文件描述符1标识)的任何内容以清除其输出。

在Posix系统上提供交互式文本界面的常用方法是ncurses,但我还没有看到它与iostream一起使用。 (好吧,我根本不熟悉诅咒。)

-2

我做了一些挖掘并找到了一种方法来做到这一点!

#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/

+0

严,没有冒犯,但这不是一个好主意......你正在为你的本地问题使用一个全局解决方案(模拟击键),但最重要的是,你正在引入一个竞争条件 - 如果用户改变焦点到另一个窗口?输入按键将进入不相关的应用程序,并具有潜在的危险影响。如果您想在Windows上更好地控制控制台输入,只需使用控制台API和/或非阻塞IO。 –

+0

是的,试过后我才注意到了。这是一个问题。我会试着看看其他解决方案。 – nurtul

相关问题