运行 ncurses 程序后终端混乱

Terminal messed up after running ncurses program

这是我的程序(嗯,main 为 NCursesViewController 的实例调用此方法):

void NCursesViewController::Run(){
    initscr(); //Init ncurses standard screen
    raw();
    printw("WELCOME");
    endwin(); //Free Ncurses resources
    getch();
}

我在 Ubuntu 终端上 运行 之后,终端仍然处于某种奇怪的状态;无论我输入什么,光标都不会移动。如果我按 Enter ,无论我输入什么,它都会执行 运行 。所以我看不到我输入的内容...有什么解决方法吗?每次都要打开终端很麻烦。我在一个类似的问题中看到他们保存并恢复了终端设置,但是他们使用了 ssh 和 tty。

您应该在退出之前调用 endwin(),而不是在 getch() 之前调用。

当您调用 getch() 时,将重新进入 ncurses 模式,并且需要再次调用 endwin()。 (请参阅 man initscr:"Calling refresh or doupdate after a temporary escape causes the program to resume visual mode." getch() 自动调用 wrefresh 除非对 window 没有任何更改;因为您没有关闭回显,window被echo修改了。)

我通常在 atexit() 处理程序中执行 endwin 调用,这使得 endwin() 更有可能执行。为了安全起见,您还应该确保该进程不会被 SIGINTSIGSEGV 等未捕获的信号杀死,尽管显然您对 SIGKILL.[= 无能为力。 26=]

endwin(); //Free Ncurses resources
getch();

尝试在 endwin() 之后删除任何/所有 "curses calls"。

在这种情况下,注释掉getch();并尝试一下。
您可能会检查您的代码以找到在 endwin() 之后出现的任何其他 curses 函数。

调用 endwin() 后,我有一些非 curses 日志输出和一些 cout,但没有 curses ...距 main 末尾大约 20 行。