在 C++ 中设置单个文本颜色

Setting individual text colors in c++

本文关键字:文本 颜色 单个 设置 C++      更新时间:2023-10-16

我是C++编程的初学者,我想知道如何为单个文本设置文本颜色。我知道如何使用system("COLOR ..")设置文本颜色,但它会将颜色应用于所有文本,而不是单个文本。我一直在编码一个程序,其中当文本为"是"时,"是"将是绿色,当它是"否"时,"否"将是红色。这适用于控制台应用程序。

cout<<"Available: ";
if(available == true){
//code for setting text colors to GREEN
}
else{
//code for setting text colors to RED
}
cout<<yesno;
//code for setting text colors back to WHITE

所以输出会像例如

可用:(文本颜色

="绿色"(是(/文本颜色(

感谢您的任何帮助!

除了现有的答案之外,如果您需要一种可移植的方式来执行此操作并将设置颜色隐藏在 API 后面。有一个标题库 rlutil,它为你做这件事,包装 ANSI 和 Windows 颜色以及其他控制台操作:

rlutil::setColor(rlutil::GREY)

您需要使用 ANSI 颜色代码打印文本;但并非所有终端都支持此功能 - 如果不支持颜色序列,则会显示垃圾。

这是和示例:

cout << "33[1;31mbold red text33[0mn";

此处,\033 是 ESC 字符 ASCII 27。后跟 [,然后是用 ; 分隔的一两个数字,最后是字母 m。有关详细信息,请参阅维基百科上的此表。

在 Linux 下,你可以做这样的事情:

#include <iostream>
using namespace std;
int main() {
    cout << "33[1;30mblack" << endl
         << "33[1;31mred" << endl
         << "33[1;32mgreen" << endl
         << "33[1;33myellow" << endl
         << "33[1;34mblue" << endl
         << "33[1;35mmagenta" << endl
         << "33[0mback to normal" << endl;
    return 0;
}

查看此维基的颜色表。

在Windows下,您可以使用SetConsoleTextAttribute,如下所示:

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE);

查看此页面以了解所有字符属性。