8

因此,对于键盘上的向上键,我得到 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

4 回答 4

14

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

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

于 2013-03-09T02:31:45.990 回答
5

这是使用 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

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

于 2013-03-09T03:05:52.333 回答
1

查看http://www.gnu.org/software/ncurses/上的 ncurses 库。将其链接到您的程序将使您能够对关键事件进行各种巧妙的处理。阅读文档,看看你是否想使用它。它提供的正是您所说的您正在寻找的功能。

快乐编码!

于 2013-03-09T02:49:31.823 回答
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);
}

尝试按向上箭头,然后输入。然后尝试按向下箭头,然后输入。你会看到键到字符的转换并不简单。

于 2013-03-09T02:31:25.260 回答