gpt4 book ai didi

c - ncurses 打印出奇怪的键值

转载 作者:太空狗 更新时间:2023-10-29 11:38:41 25 4
gpt4 key购买 nike

我正在用 Linux 上的 ncurses 库用 C 编写一个小程序。

我决定用 getch() 函数检查我收到的输入,更具体地说,是 backspace 键。

backspace ASCII 十进制值为127,链接:here我决定打印我按下的键的十进制数值,例如:

一个 -> 97

A -> 65

] -> 93...

后者是正确的。

但是,以下值正确:

退格键 -> 7(即 BELL)

Supr -> 74(即“J”)

测试代码如下:

#include <curses.h>

int main(int argc, char **argv)
{
char ch;
int column,line;
int s_column,s_line;
initscr();
clear();
noecho();
raw();
keypad(stdscr,TRUE);
printw("Type: \n> ");
refresh();
getyx(stdscr,s_line,s_column);
while((ch=getch())!='\n')
{
printw("%d",ch);
addch(ch);
refresh();
}
endwin();
return 0;
}

注意:raw() 更改为 cbreak() 会生成相同的输出

输出测试:(注意:我输入:'a','A',(Backspace),(Supr),'J')

Type:
> 97a65A7^G74J74J

我不明白为什么会这样,有人可以解释为什么 Backspace 键输出 7 而不是 127,而 Supr 输出 74,这与 sa 'J' 相同吗?

最佳答案

对于特殊功能键,getch()不一定返回 ASCII 字符,它返回 KEY_xxx 之一<curses.h> 中的代码.在 Backspace 的情况下,这是:

#define KEY_BACKSPACE   0407        /* backspace key */

既然你声明了ch作为char而不是 int , 值 0407被截断为 07 .

将声明更改为:

int ch;

然后会显示263当您按退格键时。 addch()仍会显示 ^G ,虽然,因为它不使用 KEY_xxx宏。您需要在代码中处理这些字符。

关于c - ncurses 打印出奇怪的键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com