我为什么要在这里使用getch()?

时间:2016-03-13 10:49:16

标签: c ncurses curses

我正在尝试使用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);
}

1 个答案:

答案 0 :(得分:2)

如果你想在屏幕上看到mvprintw的结果,你必须刷新屏幕(完成),但在屏幕上留下结果足够长的时间才能看到他们。如果终端描述使用备用屏幕功能(例如,xterm),则endwin呼叫将切换回正常屏幕,隐藏ncurses输出的结果。

调用getch会使程序停止足够长的时间以查看结果。

需要endwin来恢复终端模式。当(n)curses处于“屏幕模式”时,它将终端(键盘)设置为“原始”模式,以允许它读取所有字符。如果您在退出程序前未拨打endwin,则必须重置终端,例如,

stty sane

control J 结尾。

如果您不希望在程序中清除屏幕,则终端描述必须不这样做(如常见问题解答中所述)。除此之外,可以使用ncurses函数filter完成所描述的简单显示/退出场景(ncurses-examples中有一个示例,但它不考虑备用屏幕)。

进一步阅读: