如何清除C中的屏幕?

use*_*382 3 c unix macos

我想清除屏幕上的所有文字.我尝试过使用:

#include <stdlib.h>
sys(clr);
Run Code Online (Sandbox Code Playgroud)

提前致谢!我正在使用OS X 10.6.8.对困惑感到抱歉!

Jim*_*ion 10

你需要看看curses.h.它是一个终端(游标)处理库,它使所有支持的文本屏幕以类似的方式运行.

有三个已发布的版本,第三个(ncurses)是您想要的版本,因为它是最新版本,并且移植到大多数平台.的官方网站是在这里,而且也有 一些很好的 教程.

#include <curses.h>

int  main(void)
{
     initscr();
     clear();
     refresh();
     endwin();
}
Run Code Online (Sandbox Code Playgroud)

  • 你为什么要投票,诅咒是一种方法 (4认同)
  • 不知道是谁贬低了它,但是"诅咒"是一种**方式,而不是**方式. (4认同)
  • 这可能有资格作为评论,但它肯定不是答案,并且不太可能帮助OP.也许如果你写了'curses.h`是什么和/或为什么他会检查`curses.h`它会更好 (4认同)
  • 我为那些懒得去谷歌的人添加了更多信息。 (2认同)

小智 5

清除屏幕的最佳方法是通过system(const char *command)stdlib.h 调用shell :

system("clear"); //*nix
Run Code Online (Sandbox Code Playgroud)

要么

system("cls"); //windows
Run Code Online (Sandbox Code Playgroud)

再说一次,最好是尽量减少对调用系统/环境的函数的依赖,因为它们会导致各种不确定的行为。

  • 多么浪费,你没有分叉一个完整的过程来做这个,为什么要引入竞争条件? (3认同)
  • 如果您认为添加库有点过分,请尝试运行一个程序。它添加了用于开发程序的所有库。此外,由于该程序是一个 _shell_,它然后解释参数,在路径上查找该程序,然后启动另一个程序。所有这些都是为了屏幕清晰?ncurses 是一个更好的选择,如果有人在“clear”或“cls”的流氓副本中滑倒,或者有能力对他们的路径重新排序,那么您不仅仅是引入了一个安全漏洞。 (2认同)
  • 您可以通过不运行两个程序来完成一项工作来避免它。如果您决定采用此解决方案,那么您可以通过轮询操作系统来避免它,以确保在将任何进一步的文本写入屏幕之前清除程序已经干净地退出(这将需要在您的程序中进行写锁定)。这个“简单”的解决方案非常有问题,以至于修复起来并不简单。使用解决方案(由 Jim 记录),它会花费您额外的五行代码,但不受这种竞争条件的影响,因为您的所有屏幕逻辑都在一个进程中。 (2认同)