C++打印彩色字符串在Dev C++、Code::Blocks中失效如何解决
问题根因
你使用的ANSI颜色转义序列默认仅在类Unix终端、在线IDE、新版Windows终端中生效,Dev C++和Code::Blocks默认调用的旧版Windows控制台(conhost.exe)默认关闭了ANSI转义序列解析功能,所以控制码会被当做普通文本直接输出,就是你看到的←[31m这类乱码。
解决方案
方案1:代码中手动开启ANSI支持(无需修改IDE配置,推荐)
在原有代码基础上新增Windows控制台配置逻辑即可,修改后的完整代码如下:
#include <iostream> #include <windows.h> using namespace std; #define red "\x1B[31m" #define reset "\033[0m" #define blue "\x1B[34m" #define green "\x1B[32m" #define yellow "\x1B[33m" int main() { // 开启控制台ANSI转义序列解析 HANDLE outputHandle = GetStdHandle(STD_OUTPUT_HANDLE); if (outputHandle != INVALID_HANDLE_VALUE) { DWORD consoleMode = 0; if (GetConsoleMode(outputHandle, &consoleMode)) { // 若ENABLE_VIRTUAL_TERMINAL_PROCESSING未定义,直接替换为0x0004即可 consoleMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode(outputHandle, consoleMode); } } cout << red << "red text" << reset << endl; return 0; }
如果编译时提示
ENABLE_VIRTUAL_TERMINAL_PROCESSING未定义,说明你使用的Dev C++自带的SDK版本过旧,直接把这个常量替换成数值0x0004就能正常编译。
方案2:修改IDE运行配置(无需改代码)
- 若你使用的是Windows 10 1511及以上版本,可以在Dev C++/Code::Blocks的运行设置中,把默认启动的控制台程序从旧版
conhost.exe更换为新版Windows终端,新版终端默认支持ANSI转义序列。 - 临时测试也可以先在生成exe的同目录下打开cmd,执行
chcp 65001切换编码后再运行exe,也能正常显示颜色。
内容的提问来源于stack exchange,提问作者hosein gohari
相关产品推荐
相关产品推荐

