2013-12-15 159 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

相關問題