我正在尝试使用ncurses并使用它,因此我可以稍后为程序创建一个界面。在下面的代码中,为什么我必须使用getch()?如果我没有把getch(),它不起作用。如何避免使用getch()?谢谢!
#include <ncurses.h>
#include <string.h>
int main()
{
int row;
int col;
initscr();
getmaxyx(stdscr, row, col);
mvprintw(row / 2, col / 2, "%s\n", "salut");
refresh();
getch();
endwin();
return (0);
}
答案 0 :(得分:2)
如果你想在屏幕上看到mvprintw
的结果,你必须刷新屏幕(完成),但在屏幕上留下结果足够长的时间才能看到他们。如果终端描述使用备用屏幕功能(例如,xterm),则endwin
呼叫将切换回正常屏幕,隐藏ncurses输出的结果。
调用getch
会使程序停止足够长的时间以查看结果。
需要endwin
来恢复终端模式。当(n)curses处于“屏幕模式”时,它将终端(键盘)设置为“原始”模式,以允许它读取所有字符。如果您在退出程序前未拨打endwin
,则必须重置终端,例如,
stty sane
以 control J 结尾。
如果您不希望在程序中清除屏幕,则终端描述必须不这样做(如常见问题解答中所述)。除此之外,可以使用ncurses函数filter
完成所描述的简单显示/退出场景(ncurses-examples中有一个示例,但它不考虑备用屏幕)。
进一步阅读: