Написание моей собственной версии kbhit с использованием <ncurses.h> для Linux - PullRequest
0 голосов
/ 01 ноября 2018
bool kbhit(void)
{
   // function without the 4 lines of code below will not work
   // but they also screw up the console
   initscr();             
   cbreak();
   noecho();
   nodelay(stdscr, TRUE);

    scrollok(stdscr, TRUE);
    int ch = getch();
    if (ch != ERR) {
        ungetch(ch);
        refresh();
        return true;
    } else {
        refresh();
        return false;
    }
}

Так как у ncurses нет kbhit, я нашел функцию выше. Но они испортили консоль. Вот что происходит, когда я пытаюсь напечатать следующее: Смотри картинку enter image description here

1 Ответ

0 голосов
/ 02 ноября 2018

Это называется "лестничная клетка".

Пример kbhit запускает проклятия, но не выходит из проклятий (используя endwin). Если ваша программа пытается использовать вызовы без проклятий, такие как printf, терминал все еще будет в режиме raw & mdash; и это будет сохраняться после выхода в оболочку (если что-то не сбрасывает терминал).

...