Это из-за звонка на refresh
.
Обновленная справочная страница не указывает это явно, но, похоже, также применяет буферизованные выходные данные.
Без вызова refresh
вывод не отображается.
Если вы добавите вызов к getch
вместо refresh
, вы получите также вывод, потому что getch
делает wrefresh
. Справочная страница :
Если окно не является пэдом, и оно было перемещено или изменено с момента последнего вызова 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
). В режиме nocbreak они будут приниматься и выводиться только после нажатия клавиши возврата.