运行护士程序后终端混乱
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
:"在临时转义后调用refresh
或doupdate
会导致程序恢复可视化模式。"getch()
自动调用wrefresh
,除非没有对窗口进行更改;由于您没有关闭回显,窗口将被回显修改。
我通常在atexit()
处理程序中执行endwin
调用,这使得endwin()
更有可能执行。为了更安全,您还应该确保进程不会被未捕获的信号(如SIGINT
或SIGSEGV
)杀死,尽管显然您无法对SIGKILL
做任何事情。
endwin(); //Free Ncurses resources getch();
尝试删除endwin()之后的任何/所有"curses calls"。
在这种情况下,注释掉getch();试试吧。
您可以检查代码以查找endwin()之后出现的任何其他curses函数。
在调用endwin()之后,我有一些非curses日志输出,和一对cout,但没有curses…
相关文章:
- 如何在linux终端中同时编译和运行c++代码
- 终端不会为C++文件创建.exe文件吗
- 如何克服提升精神AST混乱
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 用于窗口的 HID 终端
- 使用 ubuntu 终端在 c++ 上运行线程类的问题
- 写入文件 a.txt,而终端重定向到文件 b.txt
- VSCode C++终端进程已终止,退出代码为:1
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 终端如何在 shell 提示符下以编程方式阻止退格,以便您无法在其上退格,例如 $ 表示 bash 或 C:\blah\>
- Mac os x app bundle 在下载并运行时崩溃,但在终端或更改 Info.plist 时运行良好
- C printf 无法从终端按预期工作
- 如何在不丢失输出的情况下杀死/停止终端中正在运行的进程?
- std::result_of语法混乱
- 在 OSX 上打开 SDL 窗口时不要打开终端窗口
- 在终端中运行可执行文件与在Mac查找器中打开
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 运行护士程序后终端混乱