экран удержания для принятия клавиш со стрелками

для использования клавиш со стрелками сначала необходимо сохранить его для анализа. Вот почему я использую scanf для его хранения. Но когда я пытаюсь запустить этот код и когда я нажимаю клавишу «вверх», он показывает ^[[A, а когда я нажимаю ввод, то этот ^[[A удаляется, и программа выходит без печати оператора printf printf("%s",c). и printf("UP\n").

#include <stdio.h>
int main()
{
    char c[50];
    scanf("%s",&c);
    printf("%s",c);
    if (getch() == '\033'){ // if the first value is esc
        getch();// skip the [
        getch();// skip the [
        switch(getch()) { // the real value
            case 'A':
                printf("UP\n");
                break;
            case 'B':
                printf("DOWN\n");
                break;
        }
    }
    return 0;
}

person piyush-balwani    schedule 09.08.2015    source источник
comment
Это не так работает! Что вы действительно пытаетесь сделать? Изобретать заново проклятия или...?   -  person Lightness Races in Orbit    schedule 10.08.2015


Ответы (1)


Вам будет легко, если вы используете библиотеку ncurses. Просто просмотрите документацию, чтобы увидеть как его установить. После установки прочтите раздел Взаимодействие с клавиатурой.

Вот пример кода

#include <ncurses.h>
int main()
{
    int ch;

    initscr();
    raw();
    keypad(stdscr, TRUE);
    noecho();

    while(1)
    {
        ch = getch();

        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;
        }

        if(ch == KEY_UP)
            break;
    }

    endwin();
}
person Jaydeep    schedule 10.08.2015
comment
Сэр, эта программа запускает экран и не печатает никакого оператора printf при нажатии клавиш, а когда нажата стрелка вверх, она выходит без печати стрелки вверх. - person piyush-balwani; 10.08.2015
comment
сэр, у меня проблема в вашем коде. Мы должны использовать printw вместо printf для вывода форматированного вывода. Сэр, но этот код работает, когда мы инициализируем экран. На текущей консоли не работает. Спасибо - person piyush-balwani; 10.08.2015
comment
Я думаю, что ncurses предустановлен в устройствах Linux. ри8? @Джейдип - person Amrith Krishna; 10.08.2015
comment
@AmrithKrishna ncurses предустановлен в ОС нашей лаборатории. Я протестировал этот код на Ubuntu, и он отлично работает. Однако, чтобы заставить его работать на тестовой ОС, нам нужно изменить printf на printw. - person Jaydeep; 10.08.2015
comment
@piyush-balwani вам просто нужно преобразовать printf в printw в вашей оболочке. Больше ничего менять не надо, я полагаю. - person Jaydeep; 10.08.2015
comment
сэр /*initscr(); сырой(); noecho();*/ т.е. если я не хочу initscr, то этот код не работает. - person piyush-balwani; 10.08.2015