printf函数高级用法设置打印字体颜色和背景色等

嗨喽,大家好!今天给大家介绍一下printf函数高级用法!

printf函数普通用法

'printf()' 是 C 语言中的一个函数,用于将指定格式的文本输出到标准输出设备(通常是控制台)。printf() 函数通常与格式化字符串一起使用,用于输出不同类型的数据,例如整数、浮点数、字符、字符串等。

printf() 函数的基本语法如下:

int printf(constchar *format, ...);

其中,format 是一个字符串,用于指定输出的格式,可以包含普通字符和格式占位符。... 是一个省略号,表示参数列表可以有任意数量的参数,这些参数与格式占位符一一对应,用于输出不同类型的数据。printf() 函数返回输出的字符数,如果出现错误则返回负值。

下面是一些常用的格式占位符:

  • '%d':输出整数。

  • '%f':输出浮点数。

  • '%c':输出字符。

  • '%s':输出字符串。

  • '%p':输出指针的地址。

  • '%x' 或 '%X':输出十六进制数。

  • '%o':输出八进制数。

下面是一些示例:

int a = 10;
float b = 3.14159;
char c = 'A';
char str[] = "Hello, World!";

printf("a = %d\n", a);
printf("b = %f\n", b);
printf("c = %c\n", c);
printf("str = %s\n", str);

输出结果:

a = 10
b = 3.141590
c = A
str = Hello, World!

除了上述示例中的基本用法外,printf() 函数还可以使用一些特殊的格式控制符,用于控制输出的格式,例如精度、宽度、对齐等。详细的使用方法可以参考 C 语言的文档或教程。

上面已经讲的printf的基本用法,现在我们就来讲它的其他用法设置打印字体颜色高亮等情形。

  • printf函数高级用法

在标准的 C 语言中,printf() 函数本身并不支持直接设置打印字体颜色、高亮等效果,需要通过 ANSI 转义码来实现。ANSI 转义码是一种控制字符序列,用于在终端上控制文本的样式和颜色。

下面是一些常用的 ANSI 转义码:

  • '\033[':表示转义序列的开始

  • 'm':表示转义序列的结束

  • '0':重置所有属性

  • '1':设置粗体或高亮

  • '30-37':设置字体色30: 黑 31: 红 32: 绿 33: 黄 34: 蓝 35: 紫 36: 深绿 37: 白色

  • '40-47':设置背景色40: 黑 41: 红 42: 绿 43: 黄 44: 蓝 45: 紫 46: 深绿 47: 白色

例如,如果要将文本设置为红色并加粗,可以使用以下转义序列:

printf("\033[1;31mThis text is in red and bold.\033[0m\n");

其中,'1' 表示加粗或高亮,'31' 表示前景色为红色,'\033[' 是转义序列的开始,'m' 是转义序列的结束,'\033[0m' 表示将属性重置为默认值。

另外,还可以加一些其他ANSI控制码:

  • /033[0m 关闭所有属性

  • /033[1m 设置高亮度

  • /033[4m 下划线

  • /033[5m 闪烁

  • /033[7m 反显

  • /033[8m 消隐

  • /033[30m -- /033[37m 设置前景色

  • /033[40m -- /033[47m 设置背景色

  • /033[nA 光标上移n行

  • /033[nB 光标下移n行

  • /033[nC 光标右移n行

  • /033[nD 光标左移n行

  • /033[y;xH设置光标位置

  • /033[2J 清屏

  • /033[K 清除从光标到行尾的内容

  • /033[s 保存光标位置

  • /033[u 恢复光标位置

  • /033[?25l 隐藏光标

  • /033[?25h 显示光标

注意,使用 ANSI 转义码来设置文本样式和颜色可能会因为不同的终端软件和操作系统而产生不同的效果。同时,这种方式也只适用于在终端上输出,如果需要在 GUI 程序中设置文本颜色等效果,则需要使用相应的 GUI 库提供的接口。

下面给大家提供一个宏定义打印模板,供大家参考:

温馨提示:下面代码未经编译,如有错误,请自行解决

#include "stdio.h"

#define COLOUR_END      "\033[0m"        /*关闭所有属性*/
#define COLOUR_YELLOW   "\033[1;33m"    /*高亮并且字体颜色为黄色*/

#define COMMON    0
#define YELLOW    1

#define Printf_Method1(...) \
    do{                                                        \
        printf("\033[1;33m"__VA_ARGS__"\033[0m");              \
    }while(0)
        
#define Printf_Method2(method, format, args...)                \
    do{                                                        \
        if(YELLOW == method)                                   \
        {                                                      \
            printf(COLOUR_YELLOW format COLOUR_END, ##args);   \
        }                                                      \
        else                                                   \
        {                                                      \
            printf(format, ##args);                            \
        }                                                      \
    }while(0)
        
#define Printf_Method3(method, format, args...)                \
    do{                                                        \
        if(YELLOW == method)                                   \
        {                                                      \
            printf(COLOUR_YELLOW);                             \
            printf(format, ##args);                            \
            printf(COLOUR_END);                                \
        }                                                      \
        else                                                   \
        {                                                      \
            printf(format, ##args);                            \
        }                                                      \
    }while(0)                                              

int main(int args, char *argv[])
{
    int method = YELLOW;;
    const char *str = {"hello world"};

    printf("\033[1;43;33mhello world\033[0m\r\n");

    Printf_Method1("hello world\r\n");
    Printf_Method2(method, "%s\r\n", str);
    Printf_Method3(method, "%s\r\n", str);

    return 0;
}

-END-


关于更多嵌入式C语言、FreeRTOS、RT-Thread、Linux应用编程、linux驱动等相关知识,关注公众号【嵌入式Linux知识共享】,后续精彩内容及时收看了解。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值