linux printf color颜色 \033[

本文介绍如何利用ANSI转义序列在控制台中输出带有颜色和样式的文本,包括定义不同颜色的宏以及如何在C语言程序中使用这些宏进行彩色输出。此外,还展示了如何使用ANSI控制码来改变文本显示效果,如高亮、下划线等。

color.h

#define NONE         "\033[m"
#define RED          "\033[0;32;31m"
#define LIGHT_RED    "\033[1;31m"
#define GREEN        "\033[0;32;32m"
#define LIGHT_GREEN  "\033[1;32m"
#define BLUE         "\033[0;32;34m"
#define LIGHT_BLUE   "\033[1;34m"
#define DARY_GRAY    "\033[1;30m"
#define CYAN         "\033[0;36m"
#define LIGHT_CYAN   "\033[1;36;43m"
#define PURPLE       "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN        "\033[0;33m"
#define YELLOW       "\033[1;33m"
#define LIGHT_GRAY   "\033[0;37m"
#define WHITE        "\033[1;37m"

/*
比如:
printf("\033[31m ####----->> \033[32m" "hello\n" "\033[m");
颜色分为背景色和字体色,30~39用来设置字体色,40~49设置背景:
背景色                        字体色
40: 黑                          30: 黑
41: 红                          31: 红
42: 绿                          32: 绿
43: 黄                          33: 黄
44: 蓝                          34: 蓝
45: 紫                          35: 紫
46: 深绿                      36: 深绿
47: 白色                      37: 白色
记得在打印完之后,把颜色恢复成NONE,不然再后面的打印都会跟着变色。

另外,还可以加一些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   显示光标
printf( CYAN "current function is %s " GREEN " file line is %d\n" NONE,
    __FUNCTION__, __LINE__ );
fprintf(stderr, RED "current function is %s " BLUE " file line is %d\n" NONE,
    __FUNCTION__, __LINE__ );
    return 0;
*/
color.c

#include <stdio.h>
#include "color.h"


int main()
{
    printf("\033[31m ####----->> \033[32m" "hello\n" "\033[m");
    printf( LIGHT_CYAN "current function is %s " GREEN " file line is %d\n" NONE,
        __FUNCTION__, __LINE__ );
    fprintf(stderr, RED "current function is %s " BLUE " file line is %d\n" NONE,
        __FUNCTION__, __LINE__ );
        return 0;
}



<think> 我们正在使用C语言中的`printf`函数输出彩色文本。在终端中,我们可以使用ANSI转义序列来改变文本颜色。 在终端中输出彩色文本,我们可以使用ANSI转义序列。这些序列以`\033[`开头,后跟颜色代码和文本,最后以`m`结束。 基本格式:`\033[<颜色代码>m` 其中,颜色代码可以是: - 前景色(文本颜色):30-37 - 背景色:40-47 常用前景色代码: 30: 黑色 31: 红色 32: 绿色 33: 黄色 34: 蓝色 35: 品红 36: 青色 37: 白色 例如,输出红色文本: printf("\033[31m红色文本\033[0m"); 注意:在输出彩色文本后,通常要重置颜色,否则后续文本也会是彩色。重置代码是`0`,即`\033[0m`。 所以,在`printf`中更改颜色,我们可以这样写: ```c #include <stdio.h> int main() { // 输出红色文本 printf("\033[31m这是红色文本\033[0m\n"); // 输出绿色文本 printf("\033[32m这是绿色文本\033[0m\n"); return 0; } ``` 此外,还可以同时设置前景色和背景色,例如:红色前景,白色背景:`\033[31;47m` 示例: ```c printf("\033[31;47m红底白字\033[0m\n"); ``` 注意:并非所有终端都支持所有颜色代码,但大多数Unix-like系统(如Linux和macOS)的终端都支持。Windows的cmd默认不支持ANSI转义序列,但Windows 10的PowerShell和较新版本的cmd可能支持,或者可以通过设置启用。 另外,还有更丰富的256色和RGB颜色,但这里我们只讨论基础16色。 因此,在C语言中,我们可以在`printf`的字符串中嵌入这些ANSI转义序列来改变颜色。 §§相关问题§§ 1. 在Windows命令提示符(cmd)中如何启用ANSI转义序列支持? 2. 除了使用ANSI转义序列,还有其他方法在C语言中输出彩色文本吗? 3. ANSI转义序列中如何设置文本为粗体或下划线等样式? 4. 如何在C语言中跨平台(Windows/Linux/macOS)输出彩色文本? </think> 在C语言的`printf`函数中更改输出文本颜色(适用于支持ANSI转义序列的终端,如Linux/macOS终端或Windows Terminal): ```c #include <stdio.h> int main() { // 格式:\033[属性;前景色;背景色m printf("\033[0;31;47m红色文本白底\033[0m\n"); // 红字白底 printf("\033[1;32m粗体绿色文本\033[0m\n"); // 粗体绿字 printf("\033[4;33m下划线黄色文本\033[0m\n"); // 黄字下划线 printf("\033[42;34m蓝字绿底文本\033[0m\n"); // 蓝字绿底 printf("\033[35m默认紫字文本\033[0m\n"); // 紫字(无特殊样式) return 0; } ``` ### 关键控制码说明: 1. **颜色代码**(需用`;`分隔): - 前景色:`30`(黑) `31`(红) `32`(绿) `33`(黄) `34`(蓝) `35`(紫) `36`(青) `37`(白) - 背景色:`40`(黑) `41`(红) `42`(绿) `43`(黄) `44`(蓝) `45`(紫) `46`(青) `47`(白) 2. **样式代码**: - `0`:重置所有样式 - `1`:粗体 - `4`:下划线 - `7`:反色显示(前景/背景互换) 3. **完整格式**: ```c printf("\033[样式;前景色;背景色m文本内容\033[0m"); ``` ### 注意事项: 1. **末尾必须重置**:用`\033[0m`恢复默认,否则后续输出会继承颜色 2. **Windows CMD兼容性**: - 旧版CMD默认不支持,需执行: ```cmd reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 ``` - 或使用Windows Terminal/PowerShell 3. **跨平台建议**: ```c #ifdef _WIN32 #include <windows.h> #endif void set_color(int attr, int fg, int bg) { #ifdef _WIN32 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, fg | (bg << 4) | attr); #else printf("\033[%d;%d;%dm", attr, fg + 30, bg + 40); #endif } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值