我们如何实施clrscr()
?谷歌搜索我发现\x1b[2j
可用于清除屏幕,但我们如何使用它?
答案 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
:-)