Создать функцию для проверки нажатия клавиш в Unix с помощью ncurses - PullRequest
14 голосов
/ 26 октября 2010

Я искал эквивалент kbhit (), и я прочитал несколько форумов на эту тему, и большинство, похоже, предлагают использовать ncurses.

Как мне проверить, нажата ли клавишав c ++ с использованием ncurses.

Функция getch (), предоставляемая ncurses, читает символ из окна.Я хотел бы написать функцию, которая только проверяет, есть ли нажатие клавиши, а затем я хочу выполнить getch ().

Заранее спасибо.

1 Ответ

19 голосов
/ 27 октября 2010

Вы можете использовать функцию nodelay(), чтобы превратить getch() в неблокирующий вызов, который возвращает ERR, если нажатие клавиши недоступно.Если доступно нажатие клавиши, оно извлекается из очереди ввода, но вы можете отправить его обратно в очередь, если хотите, с помощью ungetch().

#include <ncurses.h>
#include <unistd.h>  /* only for sleep() */

int kbhit(void)
{
    int ch = getch();

    if (ch != ERR) {
        ungetch(ch);
        return 1;
    } else {
        return 0;
    }
}

int main(void)
{
    initscr();

    cbreak();
    noecho();
    nodelay(stdscr, TRUE);

    scrollok(stdscr, TRUE);
    while (1) {
        if (kbhit()) {
            printw("Key pressed! It was: %d\n", getch());
            refresh();
        } else {
            printw("No key pressed yet...\n");
            refresh();
            sleep(1);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...