如何用\ x1b清除屏幕[2j?

时间:2010-09-05 13:41:36

标签: c

我们如何实施clrscr()?谷歌搜索我发现\x1b[2j可用于清除屏幕,但我们如何使用它?

4 个答案:

答案 0 :(得分:6)

标准C库不提供清除屏幕的方法。您需要一个依赖于操作系统的库。

在DOS和Windows下,对于在DOS或Windows控制台中运行的程序,您可以使用操作系统附带的核心C库中提供的DOS / Windows扩展:

#include <conio.h>
clrscr();

在unix系统下,您可以使用随操作系统提供的curses库。大多数操作系统(包括Windows)都存在curses库的端口,因此这是便携式程序的一种方式。将您的计划与-lcurses相关联,然后使用

#include <curses.h>
erase();

某些终端和终端仿真器执行特殊功能,例如在收到转义序列时清除屏幕。大多数终端遵循ANSI标准,该标准定义了许多转义序列; "\x1b[2J"就是这样一个序列,它的作用是清除屏幕。注意大写J。在这样的终端上,fputs("\x1b[2J", stdout)清除屏幕。这实际上是在这样的终端上调用erase()时curses库的作用; curses库包括一个终端类型数据库以及各种类型的转义序列。

答案 1 :(得分:3)

如果你确信这是你需要使用的控制序列,那么:

#include <stdio.h>

int main(void)
{
    fputs("\x1b[2j", stdout);
    return(0);
}

这故意省略换行符 - 但你最好在'j'之后添加一行。但是,正如Gilles answer指出的那样,还有其他方法可以做到这一点,与此解决方案相比具有优势。

答案 2 :(得分:0)

在Windows上,您可以尝试

#include <tchar.h>
#include <stdio.h>
#include <windows.h>

void clrscr(void)
{
 HANDLE std_out = GetStdHandle(STD_OUTPUT_HANDLE);
 CONSOLE_SCREEN_BUFFER_INFO cbi;
 COORD origin = {0,0};
 int buf_length;

 GetConsoleScreenBufferInfo(std_out,&cbi);
 buf_length = cbi.dwSize.X*cbi.dwSize.Y;
 FillConsoleOutputCharacter(std_out,0x20,buf_length,origin,0);
 FillConsoleOutputAttribute(std_out,0x07,buf_length,origin,0);
}

int _tmain(int argc, wchar_t *argv[], wchar_t *envp[])
{
 DWORD i;
 _tprintf(TEXT("Clear screen probe...\n"));
 clrscr();

 return 0;
}

“\ x1b [H \ x1b [2J”适用于OSX。

答案 3 :(得分:0)

这是一个所谓的 ANSI 转义序列,它控制文本终端,并可与任何兼容 ANSI 的终端 [1] 一起使用:

  • \x1b[2J 清除屏幕并将光标发送到起始位置。
  • \x1b[H 将光标发送到光标起始位置。

只需 printf("\x1B[2J");echo "\x1B[2J" 它或任何适合您的打印方法:-) 当从嵌入式系统生成调试输出日志时,我将其与 printf() 一起用于初始终端清除屏幕uart 连接,但您也可以在带有 echo :-)

的标准类 Unix 终端上使用它

[1] https://en.wikipedia.org/wiki/ANSI_escape_code