2

可能重复:
C/C++:从标准输入中捕获字符而不等待按下回车
如何在 C 中的 Linux 上进行非阻塞控制台 I/O?

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

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

4

1 回答 1

5

没有 C 标准的方法来做你想做的事情(在没有用户按下回车的情况下从键盘捕获击键),你必须去特定平台。<conio.h>应该有你在 Windows 上需要的东西,你需要curses在 Linux 上得到这个。(我怀疑curses也可以在 Mac 上工作,但不要引用我的话)

在 Windowskbhit()上,不等待任何输入,如果在您进行测试的那一刻有按键按下,它只会返回。如果您还需要知道密钥是什么,那么您可以将其与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());
于 2013-01-09T04:20:23.407 回答