Подтвердить что ты не робот

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

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

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

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

Спасибо заранее.

4b9b3361

Ответ 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);
        }
    }
}