linux 采用printf 实现光标移动及背景色和字体颜色设置

在Linux下,采用printf 实现光标移动及背景色和字体颜色设置比较容易:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. // 清除屏幕
  4. #define CLEAR() printf("\033[2J")
  5. // 上移光标
  6. #define MOVEUP(x) printf("\033[%dA", (x))
  7. // 下移光标
  8. #define MOVEDOWN(x) printf("\033[%dB", (x))
  9. // 左移光标
  10. #define MOVELEFT(y) printf("\033[%dD", (y))
  11. // 右移光标
  12. #define MOVERIGHT(y) printf("\033[%dC", (y))
  13. // 定位光标
  14. #define MOVETO(x, y) printf("\033[%d;%dH", (x), (y))
  15. // 光标复位
  16. #define RESET_CURSOR() printf("\033[H")
  17. // 隐藏光标
  18. #define HIDE_CURSOR() printf("\033[?25l")
  19. // 显示光标
  20. #define SHOW_CURSOR() printf("\033[?25h")
  21. //反显
  22. #define HIGHT_LIGHT() printf("\033[7m")
  23. #define UN_HIGHT_LIGHT() printf("\033[27m")
  24. int main(int argc, char **argv) {
  25. printf("\033[31mThe color,%s!\033[1m\n", "haha");
  26. printf("\033[31mThe color,%s!\033[4m\n", "haha");
  27. printf("\033[31mThe color,%s!\033[5m\n", "haha");
  28. printf("\033[31mThe color,%s!\033[7m\n", "haha");
  29. printf("\033[31mThe color,%s!\033[8m\n", "haha");
  30. printf("\033[31mThe color,%s!\033[0m\n", "haha");
  31. printf("\033[47;31mThe color,%s!\033[0m\n", "haha");
  32. printf("\033[47mThe color,%s!\033[0m\n", "haha");
  33. sleep(2);
  34. printf("\033[47m%s!\033[5A\n", "up 5");
  35. sleep(2);
  36. printf("\033[47m%s!\033[9B\n", "down 9");
  37. sleep(2);
  38. printf("\033[47m%s!\033[19C\n", "right 19");
  39. printf("right19");
  40. sleep(2);
  41. printf("\033[47m%s!\033[10D\n", "left 10");
  42. printf("left 10");
  43. sleep(2);
  44. printf("\033[47m%s!\033[50;20H\n", "move to y:50,x 20");
  45. printf("y50 x 20");
  46. sleep(2);
  47. printf("\033[47m%s!\033[?25l\n", "hide cursor");
  48. sleep(2);
  49. printf("\033[47m%s!\033[?25h\n", "sow cursor");
  50. sleep(2);
  51. printf("\033[47m%s!\033[2J\n", "clear scleen");
  52. sleep(2);
  53. return 0;
  54. }

printf(“\033[47;31mhello world\033[5m”);
47是字背景颜色, 31是字体的颜色, hello world是字符串. 后面的\033[5m是控制码.

字体颜色

背景颜色范围: 40—49 前景色: 30—39
40: 黑色
41: 红色
42: 绿色
43: 黄色
44: 蓝色
45: 紫色
46: 青色
47: 白色
30: 黑色
31: 红色
32: 绿色
33: 黄色
34: 蓝色
35: 紫色
36: 青色
37: 白色

ANSI控制码:

  1. \033[0m // 关闭所有属性
  2. \033[1m // 设置为高亮
  3. \033[4m // 下划线
  4. \033[5m // 闪烁
  5. \033[7m // 反显
  6. \033[8m // 消隐
  7. \033[nA // 光标上移 n 行
  8. \033[nB // 光标下移 n 行
  9. \033[nC // 光标右移 n 行
  10. \033[nD // 光标左移 n 行
  11. \033[y;xH // 设置光标位置
  12. \033[2J // 清屏
  13. \033[K // 清除从光标到行尾的内容
  14. \033[s // 保存光标位置
  15. \033[u // 恢复光标位置
  16. \033[?25l // 隐藏光标
  17. \033[?25h // 显示光标

这样, 在某些时候就可以实现动态的输出.

光标控制
控制码 说明
[X;YH 将光标移至第 X 行,第 Y 列的位置。
[nA 光标上移 n 列。<<若至屏幕顶端则无效>>
[nB 光标下移 n 列。<<若至屏幕底端则无效>>
[nC 光标向右 n 行。<<若已至屏幕最右端则无效>>
[nD 光标向左 n 行。<<若已至屏幕最左端则无效>>
[nE 光标下移到第n行的第1列
[nF 光标上移到第n行的第1列
[nG 光标移动到当前行的指定列
[6n 报告光标位置。
[s 保存目前的光标位置。
[u 取出保存的光标位置来使用。
[?25l 隐藏光标
[?25h 显示光标

屏幕控制
控制码 说明
[nX 清除光标右边n个字符,光标不动。
[K或[0K 清除光标行右边全部字符,光标不动
[1K 清除光标行左边全部字符,光标不动。
[2K 清除整行,光标不动。
[J或[0J 清除光标右下屏所有字符,光标不动。
[1J 清除光标左上屏所有字符,光标不动。
[2J 清屏,光标移到左上角。
[nM 删除光标之下n行,剩下行往上移,光标不动。
[nP 删除光标右边n个字符,剩下部分左移,光标不动。
[n@ 在当前光标处插入n个字符。
[nL 在当前光标下插入n行。
[nS 页面向上滚动n行
[nT 页面向下滚动n行
+显示字符属性控制

控制码 说明
[n1;n2;…m 设定显示字符的属性状态。若有两个以上设定则以分号将代码(n1;n2;…)隔开,除非重新设定,否则原设定之属性一直被保留。
代码 意义
0 所有属性 OFF,即返回正常显示模式 (Normal)
1 高亮度显示 (Bright)
4 加下划线 (Underline) (注1)
5 闪烁显示 (Flash) (注2)
7 反相显示 (Inverse)
8 不可见 (Invisable)
前景 背景 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
字体控制
控制码 说明
[0I 恢复正常字体
[1I 宋体
[2I 黑体
[3I 楷体
锁\开键盘代码
控制码 说明
[2h 锁键盘
[2l 开键盘
————————————————
版权声明:本文为CSDN博主「shuangmu9768」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shuangmu9768/article/details/120101017

windows下移动光标

若要在windows下移动光标则要调用Windows API:

  1. #include <conio.h>
  2. #include<windows.h>
  3. void setcursor(int x, int y)
  4. {
  5. HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  6. COORD setps;
  7. setps.X = x; setps.Y = y;
  8. SetConsoleCursorPosition(hCon, setps);
  9. }