Создать функцию для проверки нажатия клавиш в Unix с помощью ncurses

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

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

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

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

1 ответ

Решение

Вы можете использовать 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);
        }
    }
}
Другие вопросы по тегам