如用戶即將使用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,而沒有超時。 –