可能重复:
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但不等待输入的函数,那将非常感激。
答案 0 :(得分:5)
没有C标准的方法来做你想做的事情(在没有用户点击输入的情况下从键盘捕捉键盘),你必须去特定于平台。 <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());