我正在玩ncurses等等,我发现了一个非常奇怪的行为。
当我从ncurses lib使用initscr(),然后我使用普通的getchar()时,程序在按下第一个键后终止。
我期望的正常getchar()行为是我可以输入(或多或少),直到我按返回。
#include "curses.h"
int main()
{
initscr();
getchar();
//endwin();
return 0;
}
任何人都可以解释为什么会这样吗?
答案 0 :(得分:1)
curses将终端输入初始化为原始模式(这反过来使连接的流就像 unbuffered 一样),这样curses可以检测单字符输入。 getchar
假定输入已缓冲,因此您可以按 Enter 结束输入行。在原始模式下,getchar
会立即返回,因为只要您按一个键,read
来电就会找到一些内容。
除了endwin
之外,您还可以使用其他curses函数在终端的raw / cooked模式之间来回切换(请参阅reset_shell_mode
和reset_prog_mode
的手册)。