【问题标题】:reading input from the keyboard without pressing enter [duplicate]从键盘读取输入而不按回车[重复]
【发布时间】:2012-12-23 01:28:42
【问题描述】:

可能重复:
C/C++: Capture characters from standard input without waiting for enter to be pressed
How do you do non-blocking console I/O on Linux in C?

我正在尝试用 C 语言编写一个处于恒定循环中的程序,但我需要能够在每个循环开始时接收来自键盘的输入,或者如果没有按下任何键则继续。

getchar() 和 _getch() 是不够的,因为它们都在等待输入。如果有人知道类似于 _getch 但不等待输入的函数,将不胜感激。

【问题讨论】:

  • 您的代码将在哪个系统上运行?
  • 发布您尝试过的代码..
  • C 不假定您的键盘设备具有此功能。如果您知道自己的事实,则必须使用某些特定于平台的功能来共享此知识。

标签: c input delay prompt


【解决方案1】:

没有 C 标准的方式来做你想做的事(从键盘捕获击键而无需用户按 Enter),你必须特定于平台。 <conio.h> 在 Windows 上应该有你需要的东西,在 Linux 上你需要curses 来获得它。 (我怀疑curses 也可以在 Mac 上运行,但不要引用我的话)

在 Windows 上,kbhit() 不等待任何输入,它只会在您进行测试的那一刻有按键按下时返回。如果您还需要知道密钥是什么,则可以将其与 getch() 结合使用

类似:

while(countdown++ <= 1000){  // give a second to hit something
    if(b=kbhit())            // if the user presses a key
        break;               // leave the loop early
    Sleep(1);                // else, sleep for 1 ms and try again
}
if (b != 0)          // if something was pressed
    printf("The key was %d\n", getch());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多