平时使用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'
Send feedback to MSDN. Look here for MSDN Online resources.