我为什么要在这里使用 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 中有一个示例,但它不考虑备用屏幕)。
进一步阅读:
我正在尝试使用 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 中有一个示例,但它不考虑备用屏幕)。
进一步阅读: