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

why should I use getch() here?

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

如果你想在屏幕上看到mvprintw的结果,你必须刷新屏幕(完成),而且离开结果屏幕足够长,可以看到它们。如果终端描述使用 alternate screen 功能(例如,xterm),那么 endwin 调用将切换回正常屏幕,隐藏 ncurses 输出的结果。

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

需要调用 endwin 来恢复终端模式。当 (n)curses 处于 "screen mode" 时,它已将终端(您的键盘)设置为 "raw" 模式,以允许它读取所有字符。如果您在退出程序之前没有调用 endwin,您将不得不重置您的终端,例如,

stty sane

controlJ.

结尾

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

进一步阅读: