printf输出带颜色字符串

本文介绍如何使用ANSI控制码在控制台输出带有颜色和格式的文字,包括定义颜色、高亮显示、下划线等效果的具体代码实现。
printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
  • 颜色代码:
QUOTE:
字背景颜色范围: 40--49                   字颜色: 30--39
                40: 黑                           30: 黑
                41: 红                           31: 红
                42: 绿                           32: 绿
                43: 黄                           33: 黄
                44: 蓝                           34: 蓝
                45: 紫                           35: 紫
                46: 深绿                         36: 深绿
                47: 白色                         37: 白色

ANSI控制码:
QUOTE:
  \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   显示光标
#include <stdio.h>
#define B_RED(str)      "\033[1;31m" str "\033[0m"
#define B_GREEN(str)    "\033[1;32m" str "\033[0m"
#define B_YELLOW(str)   "\033[1;33m" str "\033[0m"
#define B_BLUE(str)     "\033[1;34m" str "\033[0m"
#define B_MAGENTA(str)  "\033[1;35m" str "\033[0m"
#define B_CYAN(str)     "\033[1;36m" str "\033[0m"
#define B_WHITE(str)    "\033[1;37m" str "\033[0m"
int main()
{
        char test[32];

        snprintf(test, sizeof(test), "12" "test %s","2");
        //snprintf(test, sizeof(test), B_BLUE("test"));
        printf("%s\n",test);

        printf("\033[1;31m str \033[0m\n");

        printf("\033[1;31;46m PumpKing \033[0m\n");
        printf(" PumpKing\n ");

}
在终端中通过 `printf` 输出颜色的日志,需要使用 **ANSI 转义序列**(ANSI Escape Codes)。这些控制码可以修改文本颜色、背景色、样式(如加粗、下划线等)。以下是具体实现方法和示例: --- ### **1. ANSI 转义序列基础格式** ```c printf("\033[属性代码;前景色;背景色m要输出的文本\033[0m"); ``` - `\033[`:转义序列开始(`\e[` 或 `\x1b[` 等效)。 - `属性代码;前景色;背景色`:控制颜色和样式(可组合,顺序无关)。 - `m`:结束控制序列。 - `\033[0m`:重置所有样式(必须添加,否则后续输出会继承颜色)。 --- ### **2. 常用颜色代码** | 类型 | 代码范围 | 示例(前景色) | |------------|--------------|---------------------| | **前景色** | `30-37` | `31`(红色) | | **背景色** | `40-47` | `41`(红底) | | **亮色** | `90-97` | `91`(亮红色) | | **属性** | `0,1,4,5,7` | `1`(加粗) | #### **完整颜色表** ```c // 前景色 #define RED "\033[31m" #define GREEN "\033[32m" #define YELLOW "\033[33m" #define BLUE "\033[34m" #define MAGENTA "\033[35m" #define CYAN "\033[36m" #define WHITE "\033[37m" // 背景色 #define BG_RED "\033[41m" #define BG_GREEN "\033[42m" // ... // 属性 #define BOLD "\033[1m" // 加粗 #define UNDERLINE "\033[4m" // 下划线 #define RESET "\033[0m" // 重置样式 ``` --- ### **3. 实际应用示例** #### **(1) 输出彩色日志** ```c #include <stdio.h> // 定义颜色宏 #define LOG_RED(str) printf("\033[31m%s\033[0m\n", str) #define LOG_GREEN(str) printf("\033[32m%s\033[0m\n", str) #define LOG_YELLOW(str) printf("\033[33m%s\033[0m\n", str) int main() { LOG_RED("Error: Something went wrong!"); // 红色错误日志 LOG_GREEN("Success: Operation completed"); // 绿色成功日志 LOG_YELLOW("Warning: High temperature"); // 黄色警告日志 return 0; } ``` #### **(2) 组合样式(加粗+颜色)** ```c printf("\033[1;31m%s\033[0m\n", "Bold Red Text"); // 加粗红色 printf("\033[4;32m%s\033[0m\n", "Underline Green"); ``` #### **(3) 动态生成颜色字符串** ```c char* colorize(const char* text, int color_code) { static char buffer[256]; snprintf(buffer, sizeof(buffer), "\033[%dm%s\033[0m", color_code, text); return buffer; } printf("%s\n", colorize("Dynamic Color", 34)); // 蓝色文本 ``` --- ### **4. 跨平台注意事项** - **Windows**: 默认终端不支持 ANSI 转义码,需启用 VT100 兼容模式: ```c #include <windows.h> void enable_color() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); DWORD dwMode = 0; GetConsoleMode(hOut, &dwMode); dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode(hOut, dwMode); } ``` - **Linux/macOS**: 原生支持,无需额外处理。 --- ### **5. 高级用法:RGB 颜色(部分终端支持)** ```c printf("\033[38;2;R;G;Bm%s\033[0m", "True Color Text"); // 前景色 printf("\033[48;2;R;G;Bm%s\033[0m", "True Color BG"); // 背景色 ``` 示例(输出紫色文字): ```c printf("\033[38;2;128;0;128mPurple Text\033[0m\n"); ``` --- ### **6. 封装建议** 推荐将颜色日志封装为函数或宏,便于复用: ```c #define LOG_ERROR(fmt, ...) \ printf("\033[31m[ERROR] " fmt "\033[0m\n", ##__VA_ARGS__) LOG_ERROR("File not found: %s", "data.txt"); // 红色错误日志 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值