Linux で ncurses ライブラリを使用して、C で小さなプログラムを実行しています。
getch()関数で受け取った入力、具体的にはバックスペースキーをチェックすることにしました。
バックスペースASCII 10 進数値は127です。リンク:ここ では、押したキーの 10 進数値を出力することにしました。たとえば、次のようになります。
-> 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キーが127ではなく7を出力し、Suprが74を出力する理由を誰かが説明できますか?これは「J」と同じですか?