You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:45:01