C: ncurses, initscr() 改变了 getchar() 的行为?
C: ncurses, initscr() changes behaviour of getchar()?
我只是在玩 ncurses 等等,我发现了一个非常奇怪的行为。
当我使用 ncurses 库中的 initscr(),然后使用普通的 getchar() 时,程序会在按下第一个键后终止。
我期望的正常 getchar() 行为是,只要我按下 return,我就可以输入(或多或少)。
#include "curses.h"
int main()
{
initscr();
getchar();
//endwin();
return 0;
}
谁能解释一下为什么会这样?
curses 将终端输入初始化为 raw 模式(这反过来使连接的流就像 unbuffered 一样),所以curses 可以检测单字符输入。 getchar
假定输入已缓冲,因此您可以按 Enter 结束输入行。在 raw 模式下,getchar
returns 马上,因为 read
调用会在您按下一个键后立即找到一些东西。
除了endwin
之外,您还可以使用其他 curses 函数在终端的 raw/cooked 模式之间切换 back/forth(参见 reset_shell_mode
and reset_prog_mode
的手册)。
我只是在玩 ncurses 等等,我发现了一个非常奇怪的行为。
当我使用 ncurses 库中的 initscr(),然后使用普通的 getchar() 时,程序会在按下第一个键后终止。
我期望的正常 getchar() 行为是,只要我按下 return,我就可以输入(或多或少)。
#include "curses.h"
int main()
{
initscr();
getchar();
//endwin();
return 0;
}
谁能解释一下为什么会这样?
curses 将终端输入初始化为 raw 模式(这反过来使连接的流就像 unbuffered 一样),所以curses 可以检测单字符输入。 getchar
假定输入已缓冲,因此您可以按 Enter 结束输入行。在 raw 模式下,getchar
returns 马上,因为 read
调用会在您按下一个键后立即找到一些东西。
除了endwin
之外,您还可以使用其他 curses 函数在终端的 raw/cooked 模式之间切换 back/forth(参见 reset_shell_mode
and reset_prog_mode
的手册)。