Обновление NCurses

У меня есть небольшая программа ncurse, которую я запускаю, но вывод, похоже, не появляется, если я не wrefresh() в цикле while.

Есть ли какая-то буферизация или что-то еще? Я попробовал другие функции refresh в библиотеке и stddout с помощью stddout (что, я думаю, не имеет смысла, но стоит попробовать), но ничего не работает.

Второй маленький вопрос: чтобы сделать getch() неблокируемым, нам нужно вызвать nodelay(win,TRUE) , правильно?

void main() { initscr(); start_color(); init_pair(1,COLOR_YELLOW,COLOR_CYAN); WINDOW *win = newwin(10,10,1,1); wbkgd(win,COLOR_PAIR(1)); wprintw(win,"Hello, World."); wrefresh(win); getch(); delwin(win); endwin(); }
void main() { initscr(); start_color(); init_pair(1,COLOR_YELLOW,COLOR_CYAN); WINDOW *win = newwin(10,10,1,1); wbkgd(win,COLOR_PAIR(1)); wprintw(win,"Hello, World."); wrefresh(win); getch(); delwin(win); endwin(); } 

Вы не должны смешивать операции с stdscr и windowsми, созданными с помощью newwin() . getch() работает на stdscr , так что это ваша проблема. Замените этот вызов

 wgetch(win); 

( getch() вызывает сброс stdscr поверх другого вашего windows, и поскольку это происходит так быстро, похоже, что другое окно никогда не отображалось вообще).

Это работает так, как было разработано. Это позволяет полностью перерисовать ваш следующий экран, но только те части, которые фактически изменились, отправляются на терминал во время обновления. В наши дни это не так уж и важно, но имеет большое значение, когда терминальные соединения были относительно медленными.