提问者:小点点

C: ncurses,initscr()改变getchar()的行为?


我只是在玩诅咒,所以我发现了一个非常奇怪的行为。

当我使用 ncurses lib 中的 initscr() 时,然后我使用普通的 getchar(),然后程序在按下第一个键后终止。

我所期望的正常getchar()行为是,只要我按下回车键,我就可以键入(或多或少)。

#include "curses.h"

int main()
{
    initscr();
    getchar();
  //endwin();

    return 0;
}

有人能给我解释一下为什么会这样吗?


共1个答案

匿名用户

curses 将终端输入初始化为原始模式(这反过来又使连接的流表现得好像没有缓冲),以便 curses 可以检测单字符输入。getchar 假定输入是缓冲的,因此您可以按 Enter 结束输入行。在原始模式下,getchar 会立即返回,因为只要您按下某个键,读取调用就会找到某些内容。

除了endwin,您还可以使用其他curse函数在终端的生/熟模式之间来回切换(参见reset_shell_modereset_prog_mode的手册)。

相关问题