一尘不染

在Linux上使用kbhit()和getch()

linux

在Windows上,我具有以下代码来查找输入而不会中断循环:

#include <conio.h>
#include <Windows.h>
#include <iostream>

int main()
{
    while (true)
    {
        if (_kbhit())
        {
            if (_getch() == 'g')
            {
                std::cout << "You pressed G" << std::endl;
            }
        }
        Sleep(500);
        std::cout << "Running" << std::endl;
    }
}

但是,看到没有conio.h,在Linux上实现相同目标的最简单方法是什么?


阅读 568

收藏
2020-06-02

共1个答案

一尘不染

上面引用的ncurses howto可能会有所帮助。这是一个示例,说明如何像conio示例一样使用ncurses:

#include <ncurses.h>

int
main()
{
    initscr();
    cbreak();
    noecho();
    scrollok(stdscr, TRUE);
    nodelay(stdscr, TRUE);
    while (true) {
        if (getch() == 'g') {
            printw("You pressed G\n");
        }
        napms(500);
        printw("Running\n");
    }
}

请注意,对于ncurses,iostream不使用标头。这是因为将stdio与ncurses混合会产生意外结果。

顺便说一下,ncurses定义TRUEFALSE。正确配置的ncurses将为ncurses使用与bool用于配置ncurses的C
++编译器相同的数据类型。

2020-06-02