Windows中可以使用#include <conio.h>
for _kbhit()
and _getch()
组合。
Linux中可以自己实现一个kbhit()函数,代码如下:
#include <iostream>
// #include <unistd.h>
#include <sys/ioctl.h>
#include <termios.h>
using namespace std;
bool kbhit()
{
termios term;
tcgetattr(0, &term);
termios term2 = term;
term2.c_lflag &= ~ICANON;
tcsetattr(0, TCSANOW, &term2);
int byteswaiting;
ioctl(0, FIONREAD, &byteswaiting);
tcsetattr(0, TCSANOW, &term);
return byteswaiting > 0;
}
// static bool kbhit(void)
// {
// struct timeval tv;
// fd_set rdfs;
// tv.tv_sec = 0;
// tv.tv_usec = 0;
// FD_ZERO(&rdfs);
// FD_SET(STDIN_FILENO, &rdfs);
// select(STDIN_FILENO + 1, &rdfs, NULL, NULL, &tv);
// return FD_ISSET(STDIN_FILENO, &rdfs);
// }
int main()
{
int i;
int c;
// Check for keyboard input
while (true)
{
if (kbhit())
{
c = fgetc(stdin);
cout << endl;
switch (c)
{
case 'h':
cout << "you input h"<<endl;
break;
case 'p':
cout << "you input p"<<endl;
break;
default:
break;
}
}
}
return 0;
}
注释掉的方法(和头文件)也可以实现这个功能。