Ccurses程序结束后如何使屏幕恢复正常
Posted
技术标签:
【中文标题】Ccurses程序结束后如何使屏幕恢复正常【英文标题】:C How to return screen to normal after curses program ends 【发布时间】:2013-11-12 12:49:21 【问题描述】:我还是 C 和 ncurses 的新手。我被要求做一个涉及制作多线程乒乓球游戏的任务。游戏运行良好,并以正确的失败条件结束,但在终止时,我的终端全乱了。我没有得到回声,所以我必须输入stty echo
才能找回它,即使终端表现得很奇怪。
我的最终功能如下:
void wrap_up()
curs_set(1);
clear();
endwin();
refresh();
这是一个屏幕截图。我该如何解决?
【问题讨论】:
功能代码是什么? 请提供一个最小的工作(可编译)示例。stty onlcr icrnl
将为您的 shell 恢复格式。
【参考方案1】:
移除 endwin 后的刷新。在 endwin 之后调用 refresh 会导致程序回到 curses 模式。
【讨论】:
【参考方案2】:嗯,这取决于你想如何实现它。 为了使其可移植,您可能需要实现编译指令以根据您正在使用的操作系统清除屏幕。
例如:
void Refresh()
#ifdef WIN_32_OS
system("cls");
#elif LINUX_OS
system("clear");
#else // (DOS, for example)
system("Another command");
#endif
所以在编译时你可以使用类似的东西:
bash2.2$ gcc -c -DLINUX_OS 代码.c -o 代码
【讨论】:
这看起来像是解决方法而不是解决方案。此外,clear
命令不适用于这种情况,您正在查看 reset 或 tset。
@CaseyJones 我知道了,但我没有找到为什么我的答案没有用。
恐怕你的回答没有解决问题。在 OP 描述的情况下,Clear 不会将终端恢复到工作状态。为此,您需要使用“reset”或“tset”命令。以上是关于Ccurses程序结束后如何使屏幕恢复正常的主要内容,如果未能解决你的问题,请参考以下文章