C++ C++;彩色控制台文本

C++ C++;彩色控制台文本,c++,C++,我到处都在找,真不敢相信找到它有多难。 我有以下代码: cout << "Hello"; cout << "Bye"; 但是,这会使控制台中的所有文本呈绿色 不幸的是,我只需要它在Windows7上工作。没有本机可移植的方法可以做到这一点,因为bash/linux将使用ANSI转义码(与旧的DOS一样),但是windowsxp或更高版本将使用控制台API(textcolor等)调用 您可能会得到一个第三方库,它可以为这两个库(ncurses/p-curses)提供单一的

我到处都在找,真不敢相信找到它有多难。 我有以下代码:

cout << "Hello";
cout << "Bye";
但是,这会使控制台中的所有文本呈绿色


不幸的是,我只需要它在Windows7上工作。没有本机可移植的方法可以做到这一点,因为bash/linux将使用ANSI转义码(与旧的DOS一样),但是windowsxp或更高版本将使用控制台API(textcolor等)调用

您可能会得到一个第三方库,它可以为这两个库(ncurses/p-curses)提供单一的API


不幸的是,请看一看。没有本机可移植的方法可以做到这一点,因为bash/linux将使用ANSI转义码(与旧的DOS一样),但是windowsxp或更高版本将使用控制台API(textcolor等)调用

您可能会得到一个第三方库,它可以为这两个库(ncurses/p-curses)提供单一的API


看看

对我有效的方法是使用Windows,但我不使用Windows(尽管它可能仍然有效):

#包括
int main()
{

std::cout对我有效的方法是使用,但我没有使用Windows(尽管它可能仍然有效):

#包括
int main()
{

std::cout如果您使用的是windows,则可以使用
SetConsoleTextAttribute
将文本着色为任何颜色,或者:

void change_color(const int color_flags)
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute( hConsole, color_flags );
}
template <class T>
void print_colored(const int color_flags,const T & arg)
{
    change_color(color_flags);
    cout << arg;
    change_color(FOREGROUND_RED   | FOREGROUND_GREEN | FOREGROUND_BLUE);//back to normal
}

print_colored(FOREGROUND_RED,"stuff");//this will be red
void更改颜色(const int color\u标志)
{
HANDLE hConsole=GetStdHandle(标准输出句柄);
SetConsoleTextAttribute(hConsole、颜色标志);
}
模板
无效打印颜色(常量int颜色标记、常量T和参数)
{
更改颜色(颜色标志);

cout如果您使用的是windows,则可以使用
SetConsoleTextAttribute
将文本颜色设置为任意颜色,或者:

void change_color(const int color_flags)
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute( hConsole, color_flags );
}
template <class T>
void print_colored(const int color_flags,const T & arg)
{
    change_color(color_flags);
    cout << arg;
    change_color(FOREGROUND_RED   | FOREGROUND_GREEN | FOREGROUND_BLUE);//back to normal
}

print_colored(FOREGROUND_RED,"stuff");//this will be red
void更改颜色(const int color\u标志)
{
HANDLE hConsole=GetStdHandle(标准输出句柄);
SetConsoleTextAttribute(hConsole、颜色标志);
}
模板
无效打印颜色(常量int颜色标记、常量T和参数)
{
更改颜色(颜色标志);

C++在一个ANSI能力终端上,可以编写自己的ANSI流操纵器,如STD::Endl,但是在使用时以更可读的方式处理ANSI转义代码。 对于基本的原始实现,这样做的代码可以如下所示:

namespace ansi {
  template < class CharT, class Traits >
  constexpr
  std::basic_ostream< CharT, Traits > & reset( std::basic_ostream< CharT, Traits > &os )
  {
     return os << "\033[0m";
  }

  template < class CharT, class Traits >
  constexpr
  std::basic_ostream< CharT, Traits > & foreground_black( std::basic_ostream< CharT, Traits > &os )
  {
     return os << "\033[30m";
  }

  template < class CharT, class Traits >
  constexpr
  std::basic_ostream< CharT, Traits > & foreground_red( std::basic_ostream< CharT, Traits > &os )
  {
     return os << "\033[31m";
  }
  ...
 } // ansi
名称空间ansi{
模板<班级图表,班级特征>
常量表达式
std::basic_ostream&reset(std::basic_ostream&os)
{
返回操作系统
常量表达式
std::basic_ostream&前景_black(std::basic_ostream&os)
{
返回操作系统
常量表达式
std::basic_ostream&前景(std::basic_ostream&操作系统)
{

在一个ANSI能力终端上C++返回OS

,可以编写自己的ANSI流操作器,如STD::Endl,但是在使用时以更可读的方式处理ANSI转义代码。 对于基本的原始实现,这样做的代码可以如下所示:

namespace ansi {
  template < class CharT, class Traits >
  constexpr
  std::basic_ostream< CharT, Traits > & reset( std::basic_ostream< CharT, Traits > &os )
  {
     return os << "\033[0m";
  }

  template < class CharT, class Traits >
  constexpr
  std::basic_ostream< CharT, Traits > & foreground_black( std::basic_ostream< CharT, Traits > &os )
  {
     return os << "\033[30m";
  }

  template < class CharT, class Traits >
  constexpr
  std::basic_ostream< CharT, Traits > & foreground_red( std::basic_ostream< CharT, Traits > &os )
  {
     return os << "\033[31m";
  }
  ...
 } // ansi
名称空间ansi{
模板<班级图表,班级特征>
常量表达式
std::basic_ostream&reset(std::basic_ostream&os)
{
返回操作系统
常量表达式
std::basic_ostream&前景_black(std::basic_ostream&os)
{
返回操作系统
常量表达式
std::basic_ostream&前景(std::basic_ostream&操作系统)
{

返回操作系统这里是一个在Windows和Linux下都能工作的解决方案:

#包括
#包括
#ifdef_WIN32
#定义WIN32_精益_和_平均值
#定义超精益
#包括
#endif/\u WIN32
使用名称空间std;
#定义颜色\u黑色0
#定义颜色\u深\u蓝1
#定义颜色\u深\u绿2
#定义颜色\u浅蓝色\u 3
#定义颜色\u深\u红4
#定义颜色\u洋红色5
#定义橙色6的颜色
#定义颜色\u浅灰色\u 7
#定义颜色为灰色8
#定义蓝色9的颜色
#定义绿色10的颜色
#定义颜色_青色11
#定义颜色\u红色12
#定义粉色13的颜色
#定义黄色14的颜色
#定义颜色\u白色15
无效打印(常量字符串s=”“){

cout这里有一个在Windows和Linux下都能工作的解决方案:

#包括
#包括
#ifdef_WIN32
#定义WIN32_精益_和_平均值
#定义超精益
#包括
#endif/\u WIN32
使用名称空间std;
#定义颜色\u黑色0
#定义颜色\u深\u蓝1
#定义颜色\u深\u绿2
#定义颜色\u浅蓝色\u 3
#定义颜色\u深\u红4
#定义颜色\u洋红色5
#定义橙色6的颜色
#定义颜色\u浅灰色\u 7
#定义颜色为灰色8
#定义蓝色9的颜色
#定义绿色10的颜色
#定义颜色_青色11
#定义颜色\u红色12
#定义粉色13的颜色
#定义黄色14的颜色
#定义颜色\u白色15
无效打印(常量字符串s=”“){

难道我不认为有一种可移植的方法可以做到这一点。例如,Bash使用颜色代码(请参阅)。其他Shell,尤其是其他操作系统上的Shell,会有不同的做法。在Linux上,您可以使用Ansi颜色代码。请看[此答案][1]。[1]:在DOS下,如果将
device=C:\DOS\ANSI.SYS
添加到
config.SYS
中,您也可以使用ANSI颜色。当然,我更喜欢
devicehigh
来使用所有这些备用UMB。我只需要它来与windows 7一起工作。试试这个:我认为没有一种可移植的方法。Bash使用颜色代码(请参阅)例如,其他Shell,尤其是其他操作系统上的Shell,会有不同的做法。在Linux上,您可以使用Ansi颜色代码。请查看[此答案][1]。[1]:在DOS下,如果将
device=C:\DOS\ANSI.SYS
添加到
config.SYS
中,也可以使用ANSI颜色。当然,我更喜欢
devicehigh
来使用所有这些备用UMB。我只需要它来与windows 7一起工作。请尝试以下方法:
std::cout << ansi::foreground_red << "in red" << ansi::reset << std::endl;