我只是在玩诅咒,所以我发现了一个非常奇怪的行为。
当我使用 ncurses lib 中的 initscr() 时,然后我使用普通的 getchar(),然后程序在按下第一个键后终止。
我所期望的正常getchar()行为是,只要我按下回车键,我就可以键入(或多或少)。
#include "curses.h"
int main()
{
initscr();
getchar();
//endwin();
return 0;
}
有人能给我解释一下为什么会这样吗?
curses 将终端输入初始化为原始模式(这反过来又使连接的流表现得好像没有缓冲),以便 curses 可以检测单字符输入。getchar
假定输入是缓冲的,因此您可以按 Enter 结束输入行。在原始模式下,getchar
会立即返回,因为只要您按下某个键,读取
调用就会找到某些内容。
除了endwin
,您还可以使用其他curse函数在终端的生/熟模式之间来回切换(参见reset_shell_mode
和reset_prog_mode
的手册)。