【问题标题】:Is there a way to force cin to submit?有没有办法强制cin提交?
【发布时间】:2014-01-02 16:43:47
【问题描述】:

例如,如果用户要使用 cin 函数输入内容,但过了一会儿它会强制用户在没有实际按下 enter 的情况下按 enter,因此它会结束 cin 函数。

  1. Cin 正在等待用户完成。
  2. 另一个线程调用一个布尔值,表明 cin 必须结束。
  3. Cin 需要按原样输入,即使用户没有完成输入。

【问题讨论】:

  • 查看无缓冲控制台 i/o 设施的 curses 库
  • 是否有不使用其他库的标准方法来做到这一点?
  • @nurtul:不,C++ 标准只是执行阻塞 IO,没有超时。

标签: c++ auto cin enter


【解决方案1】:

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

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

【讨论】:

    【解决方案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/

    【讨论】:

    • 嗯,无意冒犯,但这不是一个好主意...您正在为本地问题使用全局解决方案(模拟击键),但最重要的是,您正在引入竞争条件 - 什么如果用户将焦点转移到另一个窗口?回车键将转到不相关的应用程序,具有潜在的危险影响。如果您想在 Windows 上更好地控制控制台输入,只需使用控制台 API 和/或非阻塞 IO。
    • 是的,我试过之后才注意到。那是个问题。我会尝试看看其他解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2014-04-17
    • 2012-07-01
    • 2021-08-07
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多