printf数据类型说明符复杂问题

3
printf("\e[2J\e[0;0H");

这行代码是什么意思?

我应该在哪里学习,怎样理解这个语句?


6
看起来像是一些终端控制码。 https://zh.wikipedia.org/wiki/ANSI_escape_code - Eugene Sh.
1
这里提供一些帮助:https://zh.wikipedia.org/wiki/ANSI转义代码 - KagurazakaKotori
1
你试过直接运行它看看会发生什么吗? - ChrisMM
2个回答

1

"\e"作为转义序列不是C标准的一部分。

许多编译器将这种本来未定义的行为视为一个字符,其值为27 - ASCII的转义字符。

另一种良好定义的代码:

//printf("\e[2J\e[0;0H");
printf("\x1B[2J\x1b[0;0H");
printf("\033[2J\033[0;0H");
#define ESC "\033"
printf(ESC "[2J" ESC "[0;0H");

转义字符引入了 ANSI 转义序列,如 @Mickael B. 所述。一些终端实现了这些序列。

0

它们是ANSI转义序列

这些序列定义了改变显示图形、控制光标移动和重新分配键的功能。

它以\e[开头,接下来的字符定义了应该发生什么。

2J:清除终端

Esc[2J 擦除显示: 清除屏幕并将光标移动到起始位置(第0行,第0列)。

0;0H 将光标移动到位置 (0, 0)

Esc[Line;ColumnH 光标位置: 将光标移动到指定位置(坐标)。

另请参见:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接