我正在研究我认为应该是一个简单的程序,我已经用google搜索了,我能找到的就是C#,C ++的东西。
我想要完成的是启动我用C
编写的程序并让它听取某些键击。我有一个函数会移动一个伺服器,所以我想集成向上和向下箭头键来执行向一个方向或另一个方向移动伺服的功能。这可能在C
吗?
答案 0 :(得分:3)
你在linux或Windows上工作吗?基于此,可以使用其他替代方案。 如果您正在使用Windows,您应该熟悉一个函数:kbhit()?虽然它已被弃用,但它的工作知识可能很有用:) 假设您正在使用Linux,您是否尝试过NCurses?
取自[Here] :( http://www.linuxmisc.com/9-unix-programmer/d5b30f8d1faf8d82.htm)
问题是三方面的:
从同一页面:
那就是说,我提出以下尴尬,匆匆写的, 未注释的代码,可能是有帮助的,也可能不是(部分由我编辑,缺少括号而不是缩进)
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
static struct termios orig_term;
void u_cleanup(void)
{
tcsetattr(0, TCSANOW, &orig_term);
}
int u_kbhit(void)
{
struct termios t;
int ret;
fd_set rfd;
struct timeval to;
static int first_hit=0;
if(first_hit==0)
{
if(tcgetattr(0, &t)!=0) exit(0);
orig_term=t;
cfmakeraw(&t);
if(tcsetattr(0, TCSANOW, &t)!=0) exit(0);
atexit(u_cleanup);
first_hit=1;
}
FD_ZERO(&rfd);
FD_SET(0, &rfd);
to.tv_sec=0;
to.tv_usec=0;
if(select(1, &rfd, NULL, NULL, &to)==1) return 1;
return 0;
}
int u_getchar(void)
{
int ret;
fd_set rfc;
unsigned char buf;
if(read(0, &buf, 1)!=1) ret=0;
else ret=buf;
return ret;
}
int main(void)
{
while(1)
{
if(u_kbhit())
{
int key=u_getchar();
printf("hit: %d\r\n", key);
if(key==3)
{
printf("you hit control-c\r\n");
exit(0);
}
}
usleep(100);
}
return 0; // inaccessible code, to prevent compiler warning
}