为什么在这种情况下,printw
显示“Blah”?我使用nocbreak
。因此printw
不应该正常产生输出,因为输出是行缓冲的。
int main(int ac, char **av)
{
initscr();
nocbreak();
printw("Blah");
refresh();
while (1);
}
最佳答案
这是因为调用了refresh
。
refresh man page没有显式地声明它,但它似乎也应用了缓冲输出。
如果不调用refresh
,则不会显示输出。
如果将调用添加到getch
而不是refresh
,则也会得到输出,因为getch
执行wrefresh
。Man page:
如果窗口不是便笺簿,并且自上次调用wrefresh以来它已被移动或修改,则在读取另一个字符之前将调用wrefresh。
要查看cbreak/nocbreak模式下输入的不同行为,可以使用以下程序:
int main(int ac, char **av)
{
char c, i;
initscr();
noecho(); // switch off display of typed characters by the tty
printw("cbreak\n");
cbreak();
for (i = 0; i < 5; ++i) {
c = getch();
printw("%c", c);
}
printw("\nnocbreak\n");
nocbreak();
for (i = 0; i < 5; ++i) {
c = getch();
printw("%c", c);
}
return 0;
}
在cbreak模式下,当您键入五个输入字符时,程序会看到它们(由于
getch
,因此会立即输出)。在nocbrake模式下,只有按return键才能接收和输出它们。