使用kbhit函数判断键盘有无按键(非阻塞)

时间:2022-01-26 07:01:45

平时使用getch()时,如果没有按键,则一直在等待,会打断主循环。

可以使用_kbhit()函数先判断是否有按键,若有,再调用getch()去读取。


例如:

#include <conio.h>
INT16 DBG_GetChar(void)
{
INT32 n = _kbhit();

if (n == 0)
{
return 0;
}

return _getch();
};





msdn中关于_kbhit()的说明:

_kbhit

Checks the console for keyboard input.

int _kbhit( void );

Routine Required Header Compatibility
_kbhit <conio.h> Win 95, Win NT

For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version

Return Value

_kbhit returns a nonzero value if a key has been pressed. Otherwise, it returns 0.

Remarks

The _kbhit function checks the console for a recent keystroke. If the function returns a nonzero value, a keystroke is waiting in the buffer. The program can then call_getch or _getche to get the keystroke.

Example

/* KBHIT.C: This program loops until the user
* presses a key. If _kbhit returns nonzero, a
* keystroke is waiting in the buffer. The program
* can call _getch or _getche to get the keystroke.
*/

#include <conio.h>
#include <stdio.h>

void main( void )
{
  /* Display message until key is pressed. */
  while( !_kbhit() )
     _cputs( "Hit me!! " );

  /* Use _getch to throw key away. */
  printf( "\nKey struck was '%c'\n", _getch() );
  _getch();
}

Output

Hit me!! Hit me!! Hit me!! Hit me!! Hit me!! Hit me!! Hit me!!
Key struck was 'q'

Console and Port I/O Routines


Send feedback to MSDN. Look here for MSDN Online resources.