我寫在Linux控制檯程序的命令行界面。我希望能夠使用箭頭之類的按鍵。所以捕捉代碼,我使用這個簡單的程序:捕獲在使用getchar)HOME鍵(
int main()
{
int c = 0;
while (c != 3) { // ctrl-c
c = getchar();
printf("%d\n", c);
}
}
這樣做,我有問題捕獲HOME鍵。在一臺計算機上,我得到了序列「27 91 72」,在另一臺計算機上我得到了「27 79 72」,第三次獲得了「27 91 49 126」。
我不知道爲什麼我收到的Home和End鍵,以便不同的代碼(箭頭和F1-F12鍵給三臺電腦上相同的序列)。
有沒有一種標準的方式來得到這個鍵,或某種配置的,這將使我在所有的機器相同的序列?
通過「特殊」鍵發送的轉義碼由終端類型不同,而且,更糟的是,他們並不一定構成一個前綴碼。你應該使用[curses](http://en.wikipedia.org/wiki/Curses_%28programming_library%29)爲你管理所有這些。 – Celada 2013-03-11 16:12:23
順便說一下,通常'c'不會等於'3',因爲如果用戶按下Ctrl-C,那麼您將會得到一個'SIGINT'信號。 – Celada 2013-03-11 16:13:13
這是一個比你想象中更復雜的問題......生成的代碼取決於終端類型(以及文本控制檯,xterm,gnome或kde終端或windows命令行在這方面都是不同的),以及在控制檯驅動程序或X鍵映射設置上。 Linux文本終端HOWTO,http://www.tldp.org/HOWTO/Text-Terminal-HOWTO.html給出了一些起點,特別參見第6節(絕對使用並遵循那裏提供的鏈接)。如果你想以_portable_方式來做這件事(沒有太多與術語類型相關的代碼),可以使用像'ncurses'這樣的庫。 – 2013-03-11 16:13:19