不使用回车获取单个按键值

不使用回车获取单个按键值

C++软件在终端的每一次输入都以回车键作为结束,但是有些场景,我们希望每一个输入按键都能及时转换成对应的功能。

例如,在一个小游戏中,我希望WSAD的按键可以转换成上下左右的执行命令。我不希望看到这些按键在终端中输出出来,并且输入立即执行,不需要按回车按键。

可以利用stty来实现该功能。

stty [ -a ] [ -g ] [ Options ] stty(set tty)命令用于显示和修改当前注册的终端的属性。

UNIX系统为键盘的输入和终端的输出提供了重要的控制手段,可以通过stty命令对特定终端或通信线路设置选项。

在stty中相应选项前冠以负号(-),该选项被清除;如果无负号,该选项被设置。

在Linux(Unix)系统上,可以使用下面的方式获取一个按钮。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

int keypress()
{
system("/bin/stty raw"); // 关闭原始输入, 按回车键时候,不会转到下一行
int c;
system("/bin/stty -echo"); // 禁止回显,按键时候,不打印在终端上。
c = getc(stdin);
system("/bin/stty echo") =; // 打开回显
system("/bin/stty cooked"); // 关闭一次读一个字符的模式
return c;
}

执行上面的函数,返回一个int类型的值,通过键盘按键与 ASCII 字符集对照表就可以知道对应的按键。

ASCII对照表



关注博客或微信搜索公众号多媒体与图形,获取更多内容,欢迎在公众号留言交流!
扫一扫关注公众号
作者

占航

发布于

2023-01-27

更新于

2023-10-04

许可协议

评论