getchar()为向上和向下箭头键返回相同的值(27)

因此,对于键盘上的向上键,我得到27,令人惊讶的是,对于向下键我也得到27.我需要我的程序在向上和向下键上表现不同,我似乎无法弄明白。 我正在使用Linux,需要它才能用于Linux。

#include  #include  #include  #include  int main() { int c = getchar(); if(c==27) { printf("UP"); } if(c==28) { printf("DOWN"); } } 

27表示您获得了箭头的ANSI转义序列。 它们将是三个字符的序列:27,91,然后是65,66,67,68(IIRC),用于向上,向下,向右,向左。 如果从getchar()调用中得到27 ,则再调用两次以得到91和确定按下箭头键的数字。

正如其他人提到的,这是特定于平台的,但您可能并不在意。

这是程序,它被编写为使用ncurses库,并显示按下的箭头键。

 #include int main() { int ch; /* Curses Initialisations */ initscr(); raw(); keypad(stdscr, TRUE); noecho(); printw("Press E to Exit\n"); while((ch = getch()) != 'E') { switch(ch) { case KEY_UP: printw("\nUp Arrow"); break; case KEY_DOWN: printw("\nDown Arrow"); break; case KEY_LEFT: printw("\nLeft Arrow"); break; case KEY_RIGHT: printw("\nRight Arrow"); break; default: printw("\nThe pressed key is %c",ch); } } printw("\n\Exiting Now\n"); endwin(); return 0; } 

在编译时,您必须链接到ncurses库。

 gcc main.c -lncurses 

这是一个帮助您开始使用ncurses的教程 。

查看ncurses库, url为http://www.gnu.org/software/ncurses/ 。 将它链接到您的程序将使您能够通过关键事件做各种简洁的事情。 阅读文档,看看是否要使用它。 它提供了您所说的function。

快乐的编码!

您按下时按下的按键与按下时产生的字符相混淆。 按下shift键时,您希望获得一个字符吗? 试试这个程序:

 #include  #include  #include  #include  int main() { do { int c = getchar(); printf("c=%d\n", c); } while (1); } 

尝试按向上箭头然后输入。 然后尝试按下向下箭头然后输入。 您将看到将键转换为字符并不简单。