545 字
3 分钟
ASCII输出光标和颜色
ASCII输出光标和颜色
ASCII 控制字符 - “\033”
ASCII控制字符的编号范围是0-31和127(0x00-0x1F和0x7F),共33个字符。
输出到控制台时,可以利用控制字符来控制输出文本的显示效果。
控制字符可以用8进制或16进制表示,比如:"\033", "\0x1b", "\x1b"均表示同一个控制字符,含义是ESC
ESC后面跟一个格式字符串,用来设置颜色或控制光标
| 格式 | 含义 |
|---|---|
| \033[0m | 关闭所有属性 |
| \033[1m | 设置高亮度 |
| \033[4m | 下划线 |
| \033[5m | 闪烁 |
| \033[7m | 反显 |
| \033[8m | 消隐 |
| \033[30~37m | 设置前景色 |
| \033[40~47;m | 设置背景色 |
| \033[nA | 光标上移n行 |
| \033[nB | 光标下移n行 |
| \033[nC | 光标右移n行 |
| \033[nD | 光标左移n行 |
| \033[y;xH | 设置光标位置 printf(“\033[%d;%dH”, (x), (y)) |
| \033[2J | 清屏 |
| \033[K | 清除从光标到行尾的内容 |
| \033[s | 保存光标位置 |
| \033[u | 恢复光标位置 |
| \033[?25l | 隐藏光标 |
| \033[?25h | 显示光标 |
显示光标
前景色和背景色对应的数字
| 颜色 | 背景色 | 背景色加亮 | 前景色 | 前景色加亮 |
|---|---|---|---|---|
| 黑 | 40 | 100 | 30 | 90 |
| 红 | 41 | 101 | 31 | 91 |
| 绿 | 42 | 102 | 32 | 92 |
| 黄 | 43 | 103 | 33 | 93 |
| 蓝 | 44 | 104 | 34 | 94 |
| 紫 | 45 | 105 | 35 | 95 |
| 靛蓝 | 46 | 106 | 36 | 96 |
| 白 | 47 | 107 | 37 | 97 |
使用echo命令进行测试
可以使用echo命令对格式字符串进行测试
例如:
echo -e "\033[41;36m 一段文字 \033[0m"这里先把控制台的背景色设置为红色(41),文字的颜色设置为靛蓝色(36),打印一段文字后,关闭了所有设置(还原到默认状态下)
![]()
测试不同的前景色

C语言控制颜色和输出
#include <stdio.h>#include <unistd.h>// 清除屏幕#define CLEAR() printf("\033[2J")// 上移光标#define MOVEUP(x) printf("\033[%dA", (x))// 下移光标#define MOVEDOWN(x) printf("\033[%dB", (x))// 左移光标#define MOVELEFT(y) printf("\033[%dD", (y))// 右移光标#define MOVERIGHT(y) printf("\033[%dC",(y))// 定位光标#define MOVETO(x,y) printf("\033[%d;%dH", (x), (y))// 光标复位#define RESET_CURSOR() printf("\033[H")// 隐藏光标#define HIDE_CURSOR() printf("\033[?25l")// 显示光标#define SHOW_CURSOR() printf("\033[?25h")//反显#define HIGHT_LIGHT() printf("\033[7m")#define UN_HIGHT_LIGHT() printf("\033[27m")int main(int argc,char **argv){ // 颜色 printf("\033[31mThe color,%s!\033[1m\n","haha"); printf("\033[31mThe color,%s!\033[4m\n","haha"); printf("\033[31mThe color,%s!\033[5m\n","haha"); printf("\033[31mThe color,%s!\033[7m\n","haha"); printf("\033[31mThe color,%s!\033[8m\n","haha"); printf("\033[31mThe color,%s!\033[0m\n","haha"); printf("\033[47;31mThe color,%s!\033[0m\n","haha"); printf("\033[47mThe color,%s!\033[0m\n","haha"); // 光标 sleep(2); printf("\033[47m%s!\033[5A\n","up 5"); sleep(2); printf("\033[47m%s!\033[9B\n","down 9"); sleep(2); printf("\033[47m%s!\033[19C\n","right 19"); printf("right19"); sleep(2); printf("\033[47m%s!\033[10D\n","left 10"); printf("left 10"); sleep(2); printf("\033[47m%s!\033[50;20H\n","move to y:50,x 20"); printf("y50 x 20"); sleep(2); printf("\033[47m%s!\033[?25l\n","hide cursor"); sleep(2); printf("\033[47m%s!\033[?25h\n","sow cursor"); sleep(2); printf("\033[47m%s!\033[2J\n","clear scleen"); sleep(2);
return 0;}