【问题标题】:Ncurses Keyboard inputNcurses 键盘输入
【发布时间】:2012-03-01 18:31:57
【问题描述】:

我测试了getchgetchar 但它正在等待输入,我认为必须有一个读取键盘缓冲区的函数。我的部分代码

while (1) {
    if (key!='r')
    {
        if (key!='q')
        { 
            mvprintw(LINES-2, 1, "Display will refresh in %2d seconds", t);
            refresh();  
            sleep(1);
            t--;
            break;
        }
        else
        {
        exit (0);
        }
    }
    else
    {
    return;
    }
}

【问题讨论】:

  • 你试过read(1, buffer, buffer_size)吗?
  • @Eregrith:将curses 内容与普通内容混合通常不是一个好主意。绕过curses 通常会使它处于混乱状态。这当然对于输出来说是正确的,对于输入来说也可能是这样(我没有测试过,但是如果有一个curses 替代普通函数,那么使用它可能会更好)。跨度>

标签: c linux input keyboard ncurses


【解决方案1】:

如果您不想让getch() 等待,则必须将其设置为非阻塞,使用nodelay()

执行后:

if (nodelay (pWin, 1) == ERR) {
    // some error occurred.
}

如果没有可用的输入,getch() 将返回 ERR

输入选项的联机帮助页是 heregetch 的行为在此处及其自己的联机帮助页中都被提及,链接 here


int nodelay(WINDOW *win, bool bf);

nodelay 选项使getch 成为非阻塞调用。如果没有输入准备好,getch 返回ERR。如果禁用(bfFALSE),getch 将等待直到按下某个键。

window 参数是您要对其进行此设置的curses 窗口。


在无延迟模式下,如果没有输入等待,则返回值ERR

【讨论】:

  • 嘿,我已经用 nodelay(stdscr, TRUE);和键盘(stdscr,真); noecho();
  • pWin 到底是什么?
  • @AnnoyinC:如果你对变量名使用相对通用的规则,并且如果你按照我给出的链接,你应该看到它是一个指向窗口的指针,WINDOW * :-) 这是一个标准curses 的事情,但我会尽量让它更清楚。
  • 我明白了,我今天早些时候试图提交一个编辑,概述了将stdscr 作为WINDOW* 参数立即传递给nodelays 当前终端窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多