在window下有TC的conio的库和头文件以及一些系统函数,可以对控制台进行控制,如设置光标位置,改变字体颜色,清屏等等,在用C语言写一些小游戏,或者显示程序菜单时会很方便,但是这个库文件并不是标准的C语言库文件,在Linux下是不能直接包含对应的头文件的,这就给一些程序的编写带来一些麻烦,但是幸好Linux下有对应的终端控制语句,同样能够实现上述的绝大部分效果:

在C语言中一般通过printf(), puts()等函数向终端输出信息,但是一般的字符只能依次顺序显示,要想实现一些效果可以通过在输出的字符中插入ANSI控制码来实现,先给出控制码,下面再演示使用方法

ANSI控制码:

  \033[0m 关闭所有属性 
  \033[1m 设置高亮度 
  \03[4m 下划线 
  \033[5m 闪烁 
  \033[7m 反显 
  \033[8m 消隐 
  \033[30m  --  \033[37m 设置前景色 
  \033[40m  --  \033[47m 设置背景色 
  \033[nA 光标上移n行 
  \03[nB 光标下移n行 
  \033[nC 光标右移n行 
  \033[nD 光标左移n行 
  \033[y;xH设置光标位置 
  \033[2J 清屏 
  \033[K 清除从光标到行尾的内容 
  \033[s 保存光标位置 
  \033[u 恢复光标位置 
  \033[?25l 隐藏光标 
  \33[?25h 显示光标

设置前景背景色的控制码中中间的数字代表不同的颜色

字体颜色设置对应的具体值:

背景色范围: 40--49                 文字颜色: 30--39

        40:黑                                      30:黑

        41:红                                      31:红

        42:绿                                      32:绿

        43:黄                                      33:黄

        44:蓝                                      34:蓝

        45:紫                                      35:紫

        46:深绿                                  36:深绿

        47:白色                                  37:白色

使用示例:

printf("\033[31m");    //设置字体为红色
printf("\033[42m");    //设置背景为绿色

当然也可以组合使用:

printf("\033[47;31m hello world! \033[4m");

47是字背景颜色, 31是字体的颜色, hello world! 是字符串. 后面的\033[4m是控制码

如果嫌这样使用不够直观,可以将这些printf语句写成容易理解的宏定义函数:

#include <stdio.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 CLEAR_LINE() printf("\033[K")
//反显
#define HIGHT_LIGHT() printf("\033[7m")
#define UN_HIGHT_LIGHT() printf("\033[27m")

//设置颜色
#define SET_FRONT_COLOR(color) printf("\033[%dm",(color))
#define SET_BACKGROUND_COLOR(color) printf("\033[%dm",(color))
//前景色
#define FRONT_BLACK 30
#define FRONT_RED 31
#define FRONT_GREEN 32
#define FRONT_YELLOW 33
#define FRONT_BLUE 34
#define FRONT_PURPLE 35
#define FRONT_DEEP_GREEN 36
#define FRONT_WHITE 37

//背景色
#define BACKGROUND_BLACK 40
#define BACKGROUND_RED 41
#define BACKGROUND_GREEN 42
#define BACKGROUND_YELLOW 43
#define BACKGROUND_BLUE 44
#define BACKGROUND_PURPLE 45
#define BACKGROUND_DEEP_GREEN 46
#define BACKGROUND_WHITE 47

将其放在一个头文件里,只要在需要的文件里引入这个头文件就可以像普通函数那样使用这些命令了,会比直接打印控制语句要直观不少:

#include <stdio.h>
//带有宏定义函数的头文件
#include <ctrlcur.h>

int main(int argc,char **argv)
{
        //利用宏定义函数
        SET_BACKGROUND_COLOR(BACKGROUND_RED);
        printf("前白后红");
        sleep(3);
        SET_FRONT_COLOR(FRONT_BLUE);
        printf("前蓝后红");
        sleep(3);
        SET_BACKGROUND_COLOR(BACKGROUND_BLACK);
        SET_FRONT_COLOR(FRONT_WHITE);
        printf("开始测试光标移动:");
        sleep(3);
        MOVEDOWN(5);
        printf("下移5格后打印的结果");
        sleep(3);
        MOVEUP(3);
        printf("再上移3格后打印的结果");
        sleep(3);
        MOVETO(12,12);
        printf("移动到12,12后打印的结果");
        sleep(3);
        
        //直接使用控制语句
        printf("\033[31mThe color,%s!\033[1m\n"," 1");
        printf("\033[31mThe color,%s!\033[4m\n"," 2");
        printf("\033[31mThe color,%s!\033[5m\n"," 3");
        printf("\033[31mThe color,%s!\033[7m\n"," 4");
        printf("\033[31mThe color,%s!\033[8m\n"," 5");
        printf("\033[31mThe color,%s!\033[0m\n"," 6");
        printf("\033[47;31mThe color,%s!\033[0m\n"," 7");
        printf("\033[47mThe color,%s!\033[0m\n"," 8");
        sleep(2);
        printf("\033[45m%s!\033[5A\n","up 5");
        sleep(2);
        printf("\033[44m%s!\033[9B\n","down 9");
        sleep(2);
        printf("\033[43m%s!\033[19C\n","right 19");
        printf("right19");
        sleep(2);
        printf("\033[46m%s!\033[10D\n","left 10");
        printf("left 10");
        sleep(2);
        printf("\033[44m%s!\033[50;20H\n","move to y:50,x 20");
        printf("y50 x 20");
        sleep(2);
        printf("\033[44m%s!\033[?25l\n","hide cursor");
        sleep(2);
        printf("\033[40m%s!\033[?25h\n","sow cursor");
        sleep(2);
        //printf("\033[47m%s!\033[2J\n","clear scleen");
        sleep(2);
        return 0;
}

希望能对你的编程有所帮助~~

参考博客:https://blog.csdn.net/huangblog/article/details/8285917

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐