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程序结束后如何使屏幕恢复正常的主要内容,如果未能解决你的问题,请参考以下文章

应用程序强制退出和应用程序重新启动后如何恢复 NSURLSession 下载过程?

从另一个活动返回后应用程序未恢复捆绑包

当用户关闭屏幕android时,使应用程序正常工作

如何在任务切换器中显示锁定屏幕并正确恢复

基维 |直到程序结束屏幕才会改变

中断结束后恢复 AVAudioplayer