如何使用 ANSI Escape 代码在控制台上输出彩色文本

新手上路,请多包涵

在这里阅读了有关 ANSI-C 转义码的信息。尝试在 C/C++ printf/cout 中使用它来着色输出到 consolde 但没有成功的文本。

代码:

 #include <iostream>

 #include <cstdio>

int main()
{

    int a=3, b=5;
    int &ref = a;

    ref = b;

    //cout << "\155\32\m" << a << b <<'\n'; //here it prints m→m 5, no colored text
    printf("\155\32\m %d",a); //here to it prints same - m→m 5,

    getchar();

}

如何使用这些转义码将彩色文本输出到控制台?

我错过了什么吗?

编辑: 在一些 C++ 代码中,我看到了对该函数的调用

textcolor(10);

但它会在 g++ 和 Visual Studio 中产生编译错误。哪个编译器有这个功能?有什么细节吗?

原文由 goldenmean 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 554
2 个回答

恐怕您忘记了 ESC 字符:

 #include <cstdio>

int main()
{
    printf("%c[%dmHELLO!\n", 0x1B, 32);
}

不幸的是,它只适用于支持 ANSI 转义序列的控制台(例如使用 bash 的 linux 控制台,或使用 ansi.sys 的旧 Windows 控制台)

原文由 pau.estalella 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 windows 10 下,可以通过在当前控制台中激活 VT100 模式来使用 VT100 样式:

 #include <windows.h>
#include <iostream>

#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#define DISABLE_NEWLINE_AUTO_RETURN  0x0008

int main()
{
   HANDLE handleOut = GetStdHandle(STD_OUTPUT_HANDLE);
   DWORD consoleMode;
   GetConsoleMode( handleOut , &consoleMode);
   consoleMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
   consoleMode |= DISABLE_NEWLINE_AUTO_RETURN;
   SetConsoleMode( handleOut , consoleMode );

   for (int i = 0; i < 10; ++i)
   {
      std::cout << "\x1b[38;2;" << 5 * i << ";" << 255 - 10 * i << ";220m"
             << "ANSI Escape Sequence " << i << std::endl;
   }
}

请参阅 msdn 页面:[https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences][1]

原文由 user2019716 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题