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

时间:2013-03-09 02:26:11

标签: c keyboard getchar

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
    int c = getchar();

    if(c==27)
    {
        printf("UP");
    }

    if(c==28)
    {
        printf("DOWN");
    }

} 

4 个答案:

答案 0 :(得分:8)

27表示您正在获取箭头的ANSI转义序列。它们将是三个字符的序列:27,91,然后是65,66,67,68(IIRC),用于向上,向下,向右,向左。如果您通过拨打27获得getchar(),则再拨打两次以获取91以及确定按下箭头键的数字。

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

答案 1 :(得分:2)

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

#include<ncurses.h>

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

这是一个tutorial,可以帮助您开始使用ncurses。

答案 2 :(得分:1)

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

快乐的编码!

答案 3 :(得分:0)

按下按键时,按下的键会使您按下时产生的字符混乱。按下shift键时,你希望得到一个字符吗?试试这个程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
    do
    {
        int c = getchar();
        printf("c=%d\n", c);
    }
    while (1);
}

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