所以我在想如何用C语言捕捉键盘活动。我们都知道,我们可以输入一些东西,然后按回车键,输入我们想要发送到计算机的任何东西。但第一个问题是,如何输入一些无法输入的字符,如向上键、向下键(特别是这两个人,因为我使用的是Linux,但我想用它们来做一些不同于其默认含义的事情)、shift、ctrl或其他任何字符。第二,如何让程序在我们按下任何键之后立即继续,这样我们就不需要一直进入和进入。(它类似于Windows中的“按任意键继续”)。
发布于 2012-06-26 09:06:02
“通用”方法是getchar ()。Getchar()“使用”缓冲输入“:在用户按下"Enter”之前,实际上不会得到任何输出。除非使用命令提示符(或类似命令),否则它并不真正适用。
旧的DOS方法是getch()和getche(),取自"conio.h“。这种方法在针对现代操作系统的现代C/C++库中是不存在的。
建议:
如果你想创建一个文本模式的UI (特别是在Linux上),看看ncurses:
如果您想(在Windows或Linux上)编写游戏程序,请查看SDL:
===附录===
我还是推荐你去图书馆。但这里有一个函数演示了Linux下的“原始键盘输入”(也称为“未煮熟的”或“非规范的”输入):
http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
void changemode(int);
int kbhit(void);
int
main(int argc, char *argv[])
{
int ch;
changemode(1);
while ( !kbhit() )
{
putchar('.');
}
ch = getchar();
printf("\nGot %c\n", ch);
changemode(0);
return 0;
}
void
changemode(int dir)
{
static struct termios oldt, newt;
if ( dir == 1 )
{
tcgetattr( STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt);
}
else
tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
}
int
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);
}https://stackoverflow.com/questions/11199513
复制相似问题