📅  最后修改于: 2023-12-03 15:30:01.746000             🧑  作者: Mango
在命令行中输出彩色文本可以增加程序的可读性和美观性。本文将介绍如何在C++中使用命令行输出彩色文本。
ANSI转义序列是一系列控制字符,可以控制终端的颜色、位置、样式等。在C++中,可以使用转义序列来输出彩色文本。
转义序列由一个转义字符(十进制的27,十六进制的0x1B,或者八进制的033)和一组参数和命令字符组成。
\033[参数1;参数2;...m命令字符
其中\033
可以使用\e
或\x1B
替代,参数1和参数2代表控制序列的参数,命令字符代表对终端的控制命令。
在输出彩色文本之前,需要使用转义序列设置终端的颜色。以下是一些常用的颜色代码:
| 颜色代码 | 颜色 | | --- | --- | | 30 | 黑色 | | 31 | 红色 | | 32 | 绿色 | | 33 | 黄色 | | 34 | 蓝色 | | 35 | 洋红色 | | 36 | 青色 | | 37 | 白色 |
对于前景色(即字符颜色),可以在颜色代码前面加上1,表示高亮,或者加上4,表示下划线。例如,31
代表红色,1;31
代表高亮的红色,4;31
代表下划线的红色。
对于背景色,可以在颜色代码前面加上4,表示背景色。例如,42
代表绿色背景,4;42
代表下划线的绿色背景。
以下是使用转义序列输出彩色文本的示例代码:
#include <iostream>
using namespace std;
int main()
{
cout << "\033[1;31mThis is red text.\033[0m" << endl;
cout << "\033[4;32mThis is underlined green text.\033[0m" << endl;
cout << "\033[4;31;42mThis is underlined red text on green background.\033[0m" << endl;
return 0;
}
输出结果如下:
This is red text.
This is underlined green text.
This is underlined red text on green background.
需要注意的是,使用转义序列输出彩色文本可能会因终端的不同而产生不同的效果。另外,使用转义序列可能会导致代码的可移植性差。因此,需要根据实际需求和情况来决定是否使用。
除了使用ANSI转义序列之外,还可以使用Windows Console API来在Windows命令行中输出彩色文本。
在Windows中,可以使用SetConsoleTextAttribute
函数设置控制台中文本的颜色和背景色。
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hOut, &csbi);
WORD wOldColorAttr = csbi.wAttributes;
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
cout << "This is red text." << endl;
SetConsoleTextAttribute(hOut, wOldColorAttr);
return 0;
}
注意,在使用SetConsoleTextAttribute
函数修改文本颜色之前需要先保存当前的文本颜色。
除了设置文本颜色之外,还可以使用SetConsoleScreenBufferInfo
函数来设置命令行的背景颜色。
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hOut, &csbi);
WORD wOldColorAttr = csbi.wAttributes;
SetConsoleTextAttribute(hOut, BACKGROUND_GREEN | BACKGROUND_INTENSITY);
cout << "This is a green background." << endl;
SetConsoleTextAttribute(hOut, wOldColorAttr);
return 0;
}
本文介绍了在C++中使用命令行输出彩色文本的两种方法:使用ANSI转义序列和Windows Console API。当需要在命令行中输出彩色文本时,可以根据实际需求和情况来选择合适的方法。