C ++での色付き出力

iostream とXcodeを使用してカラー出力を印刷する方法はありますか? Hello 赤、 World 青、 Hello World!を印刷することができます。コード>イエロー。どうやってやるの?

14
どのような選択肢を提案する@Anycorn?
追加された 著者 Mr Lister,
ascii-table.com/ansi-escape-sequences.php を参照してください。
追加された 著者 Some programmer dude,
可能な限り重複する(少なくとも関連する)>> stackoverflow.com/questions/7414983/…
追加された 著者 Johan Lundberg,
ありがとうございました。このスレッドを読むa>
追加された 著者 Henk Jansen,

2 答え

ターミナルカラーコードが必要です。 Linuxの場合、次のようになります(あなたのシステムは異なるかもしれませんが、それを見てください):

//the following are UBUNTU/LINUX ONLY terminal color codes.
#define RESET   "\033[0m"
#define BLACK   "\033[30m"      /* Black */
#define RED     "\033[31m"      /* Red */
#define GREEN   "\033[32m"      /* Green */
#define YELLOW  "\033[33m"      /* Yellow */
#define BLUE    "\033[34m"      /* Blue */
#define MAGENTA "\033[35m"      /* Magenta */
#define CYAN    "\033[36m"      /* Cyan */
#define WHITE   "\033[37m"      /* White */
#define BOLDBLACK   "\033[1m\033[30m"      /* Bold Black */
#define BOLDRED     "\033[1m\033[31m"      /* Bold Red */
#define BOLDGREEN   "\033[1m\033[32m"      /* Bold Green */
#define BOLDYELLOW  "\033[1m\033[33m"      /* Bold Yellow */
#define BOLDBLUE    "\033[1m\033[34m"      /* Bold Blue */
#define BOLDMAGENTA "\033[1m\033[35m"      /* Bold Magenta */
#define BOLDCYAN    "\033[1m\033[36m"      /* Bold Cyan */
#define BOLDWHITE   "\033[1m\033[37m"      /* Bold White */

これにより、次のことが可能になります。

std::cout << RED << "hello world" << RESET << std::endl;

注:RESETを使用しない場合、次回カラーコードを使用するまで色は変更されたままです。

39
追加された
@Paul RコンソールがANSIエスケープコードをサポートしているかどうかを検出する方法を知っていますので、Xcodeコンソールはそれらを表示しません。
追加された 著者 Stringer,
@ shuttle87、あなたの返事をありがとう。代わりに、 char hello = 'H' char world = 'W' char ex = 'のように3つの変数を3つの異なる色で代わりに設定することができます。 'は色分けされていますか?
追加された 著者 Shoe,
ターミナルでは動作しますが、Xcodeコンソールウィンドウでは動作しません
追加された 著者 Paul R,
彼はMac OSを使っています(少なくともXcodeを記述しているので、私は彼がいると推測しています)。
追加された 著者 Mr Lister,
書式設定コードを端末に送信し、次に文字とリセットコードを送信する必要があります。ですから、個々のキャラクターに対してこれを行うには、 cout << RED << hello << RESET; のようなことをします。これがあなたが定期的に行うことであれば、簡単にするためのユーティリティ関数を書くこともできます。
追加された 著者 shuttle87,

ANSI対応端末のC ++の方が、std :: endlのような独自のansiストリームマニピュレータを書くことは可能ですが、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

そして、このようなコードで使うことができます:

std::cout << ansi::foreground_red << "in red" << ansi::reset << std::endl;
0
追加された