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

时间:2017-10-14 21:22:07

标签: c ncurses curses getchar getch

我正在玩ncurses等等,我发现了一个非常奇怪的行为。

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

我期望的正常getchar()行为是我可以输入(或多或少),直到我按返回。

#include "curses.h"

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

    return 0;
}

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

curses将终端输入初始化为原始模式(这反过来使连接的流就像 unbuffered 一样),这样curses可以检测单字符输入。 getchar假定输入已缓冲,因此您可以按 Enter 结束输入行。在原始模式下,getchar会立即返回,因为只要您按一个键,read来电就会找到一些内容。

除了endwin之外,您还可以使用其他curses函数在终端的raw / cooked模式之间来回切换(请参阅reset_shell_modereset_prog_mode的手册)。