c++如何使用cout进行彩色文本输出 ANSI转义序列【控制台美化】

C++中cout可通过ANSI转义序列实现彩色输出,需终端支持VT100(Windows需启用ENABLE_VIRTUAL_TERMINAL_PROCESSING),格式为\033[属性m,如\033[32m绿色、\033[0m重置,跨平台建议检测终端并设fallback。

在C++中,cout本身不支持彩色输出,但可以通过向终端输出ANSI转义序列(ANSI Escape Codes)来实现文字颜色、背景色、加粗等效果。这在Linux/macOS终端和较新版本的Windows 10/11(启用VT100支持后)中可直接生效。

确认终端支持ANSI转义序列

Windows用户需确保控制台启用虚拟终端处理(VT mode),否则颜色不会显示:

  • Windows 10 1607+ 默认启用(如使用cmd或PowerShell运行exe时仍无色,可手动开启)
  • C++程序启动时可调用API启用:
    #include 
    SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING);
  • Linux/macOS一般原生支持,无需额外操作

常用ANSI颜色代码格式

ANSI彩色输出使用\033[...m(或\x1b[...m)格式,其中...是数字参数,用分号分隔。基本结构为:

前景色(文字颜色):\033[30m ~ \033[37m(黑、红、绿、黄、蓝、紫、青、白)
背景色\033[40m ~ \033[47m
样式\033[1m(加粗)、\033[4m(下划线)、\033[7m(反显)、\033[0m(重置所有样式)

多个属性可组合,例如:3[1;31;40m 表示“加粗+红色文字+黑色背景”。

在C++中用cout输出彩色文本

直接将ANSI字符串插入cout流即可,注意结尾加\033[0m恢复默认样式,避免影响后续输出:

  • std::cout
  • std::cout
  • 也可用宏简化:
    #define RED "\033[31m"
    #define RESET "\033[0m"
    std::cout << RED << "出错啦!" << RESET << std::endl;

跨平台兼容性小提示

若目标环境不确定是否支持ANSI(如旧版Windows控制台),可考虑:

  • 运行前检测环境变量TERM或调用isatty(STDOUT_FILENO)(POSIX)判断是否为终端
  • Windows下优先用SetConsoleTextAttribute(更稳定但仅限Windows)
  • 对关键日志保留纯文本 fallback,仅在检测到支持时启用ANSI

不复杂但容易忽略:每次着色后记得重置,否则后续所有输出都带颜色或样式。