Kos*_*mos 2 c linux keyboard curses ascii
我正在使用Linux上的ncurses库在C中做一个小程序.
我决定用getch()函数检查我收到的输入,更具体地说是退格键.
该退格 ASCII十进制值是127,链接:在这里 ,我决定我打印按下,例如按键的数字十进制值:
a - > 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;
}
Run Code Online (Sandbox Code Playgroud)
注意:将raw()更改为cbreak()会生成相同的输出
输出测试:(注意:我输入:'a','A',(Backspace),(Supr),'J')
Type:
> 97a65A7^G74J74J
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样,有人可以解释为什么Backspace键输出7而不是127,而Supr输出74,这是相同的sa'J'?
对于特殊功能键,getch()不一定返回ASCII字符,它返回其中一个KEY_xxx代码<curses.h>.在Backspace的情况下,这是:
#define KEY_BACKSPACE 0407 /* backspace key */
Run Code Online (Sandbox Code Playgroud)
由于您声明ch为char而不是int,该值0407被截断为07.
将声明更改为:
int ch;
Run Code Online (Sandbox Code Playgroud)
然后263在按Backspace时显示. 但addch()仍然会显示^G,因为它不使用KEY_xxx宏.您需要在代码中处理这些字符.
| 归档时间: |
|
| 查看次数: |
2407 次 |
| 最近记录: |