Konsoldaki metni C ++ ile renklendirme


99

C ++ ile konsola nasıl renkli metin yazabilirim? Yani farklı renklerle farklı metinleri nasıl yazabilirim?


C ++ konsolunda farklı renkler bulacak kaynak yok ama yok :)
Sudantha

2
C ++ konsolu nedir ??
Edward Strange


Bu cevaplara dikkat edin. Konsolunuzda değişiklikleri kendiniz geri almazsanız program çıktıktan sonra olacaktır.
kayleeFrye_onDeck

Yanıtlar:


123

Konsol Metninize Biraz Renk Katın

  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  // you can loop k higher to see more color choices
  for(int k = 1; k < 255; k++)
  {
    // pick the colorattribute k you want
    SetConsoleTextAttribute(hConsole, k);
    cout << k << " I want to be nice today!" << endl;
  }

alternatif metin

Karakter Nitelikleri Burada "k" değerinin nasıl yorumlanacağı anlatılmaktadır.


42
Bunun yalnızca Windows için olduğunu unutmayın.
DarkDust

2
Ya bir satıra birkaç renk eklemek istersem?
Fadwa

3
@Misaki Test etmedim ama 'endl' bitini kaldırmayı deneyebilir misin?
Sheen

3
HANDLE sınıfını bilmek için hangi kütüphaneyi eklemem gerekiyor?
STF

2
@STF sadece kullanmak <windows.h>
Sheen

36

ANSI kaçış renk kodları:

Name            FG  BG
Black           30  40
Red             31  41
Green           32  42
Yellow          33  43
Blue            34  44
Magenta         35  45
Cyan            36  46
White           37  47
Bright Black    90  100
Bright Red      91  101
Bright Green    92  102
Bright Yellow   93  103
Bright Blue     94  104
Bright Magenta  95  105
Bright Cyan     96  106
Bright White    97  107

C / C ++ için örnek kod:

#include <iostream>
#include <string>

int main(int argc, char ** argv){
    
    printf("\n");
    printf("\x1B[31mTexting\033[0m\t\t");
    printf("\x1B[32mTexting\033[0m\t\t");
    printf("\x1B[33mTexting\033[0m\t\t");
    printf("\x1B[34mTexting\033[0m\t\t");
    printf("\x1B[35mTexting\033[0m\n");
    
    printf("\x1B[36mTexting\033[0m\t\t");
    printf("\x1B[36mTexting\033[0m\t\t");
    printf("\x1B[36mTexting\033[0m\t\t");
    printf("\x1B[37mTexting\033[0m\t\t");
    printf("\x1B[93mTexting\033[0m\n");
    
    printf("\033[3;42;30mTexting\033[0m\t\t");
    printf("\033[3;43;30mTexting\033[0m\t\t");
    printf("\033[3;44;30mTexting\033[0m\t\t");
    printf("\033[3;104;30mTexting\033[0m\t\t");
    printf("\033[3;100;30mTexting\033[0m\n");

    printf("\033[3;47;35mTexting\033[0m\t\t");
    printf("\033[2;47;35mTexting\033[0m\t\t");
    printf("\033[1;47;35mTexting\033[0m\t\t");
    printf("\t\t");
    printf("\n");

    return 0;
}

GCC:

g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi

3
@Mehdi Mohammadpour Windows 10'um var ve kaçış kodlarınız benim için çalışıyor, ancak bana Ön Plan ve Arka Plan kodlarını tersine çevirmişsiniz gibi görünüyor. Lütfen "FG" ve "BG" başlıklarını tersine çevirir misiniz?
yamex5

@ Yamex5'e katılıyorum
smoothware

Merhaba yamex5 ve smoothware, Teşekkürler, Tamam
Mehdi Mohammadpour

23

Standart C ++ 'renk' kavramına sahip değildir. Yani ne istediğiniz işletim sistemine bağlıdır.

Windows için SetConsoleTextAttribute işlevini kontrol edebilirsiniz .

* Nix'te ANSI kaçış dizilerini kullanmanız gerekir .


3
ASNI dizilerinin (veya en azından bir kısmının) Windows 'CMD.EXE üzerinde de çalıştığını unutmayın.
Fund Monica'nın Davası

3
@Asu, Win10 Anniversary Edition'dan önce değiller. Win10'unuz bize güncelse, ona sahipsiniz.
kayleeFrye_onDeck

7

Yöntemler yazabilir ve böyle çağırabilirsiniz


HANDLE  hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int col=12;

// color your text in Windows console mode
// colors are 0=black 1=blue 2=green and so on to 15=white  
// colorattribute = foreground + background * 16
// to get red text on yellow use 4 + 14*16 = 228
// light red on yellow would be 12 + 14*16 = 236

FlushConsoleInputBuffer(hConsole);
SetConsoleTextAttribute(hConsole, col);

cout << "Color Text";

SetConsoleTextAttribute(hConsole, 15); //set back to black background and white text

2
Not SetConsoleTextAttribute(hConsole, 15);için setler rengi Parlak Beyaz , değil Beyaz . 7 - Beyaz. ve 15 - Parlak Beyaz
GooDeeJaY

5

Windows 10'da kaçış dizilerini şu şekilde kullanabilirsiniz:

#ifdef _WIN32
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endif
// print in red and restore colors default
std::cout << "\033[32m" << "Error!" << "\033[0m" << std::endl;

4

Bir Windows konsol penceresinden bahsettiğinizi varsayarsak, MSDN Kitaplığı belgelerinde konsol işlevlerine bakın.

Aksi takdirde veya daha genel olarak konsola bağlıdır. Renkler, C ++ kitaplığı tarafından desteklenmez. Ancak konsol kullanımı için bir kitaplık renkleri destekleyebilir / destekleyecektir. Örneğin, google "ncurses renkleri".

Bağlı seri terminaller ve terminal emülatörleri için, "kaçış dizileri" çıktısı vererek şeyleri kontrol edebilirsiniz. Bunlar genellikle ASCII 27 ile başlar (ASCII'deki kaçış karakteri). Bir ANSI standardı ve birçok özel şema var.


Bu yanıt yazıldığı için Windows 10, dar konsol akışları için ANSI kaçış dizileri için destek kazandı.
Şerefe ve hth. - Alf

2

Gerçekten ne yapmak istediğinizden emin değilim, ancak tahminimce C ++ programınızın konsolda renkli metin çıktısını almasını istiyorsunuz, değil mi? Windows'u bilmiyorum, ancak tüm Unices'de (Mac OS X dahil), bunun için ANSI kaçış dizilerini kullanırsınız.


2

Windows'ta, ön planda (metin) ve arka planda kırmızı, yeşil ve mavinin herhangi bir kombinasyonunu kullanabilirsiniz.

/* you can use these constants
FOREGROUND_BLUE
FOREGROUND_GREEN
FOREGROUND_RED
FOREGROUND_INTENSITY
BACKGROUND_BLUE
BACKGROUND_GREEN
BACKGROUND_RED
BACKGROUND_INTENSITY
*/

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
std::cout << "I'm cyan! Who are you?" << std::endl;

Kaynak: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes


2

Yapabileceğiniz en basit yol:

#include <stdlib.h>

system("Color F3");

Burada "F", arka plan rengi için kod ve 3, metin rengi için koddur.

Diğer renk kombinasyonlarını görmek için onunla uğraşın:

system("Color 1A");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 3B");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 4c");
std::cout << "Hello, what is your name?" << std::endl;

Not: Yalnızca Windows üzerinde test ettim. İşler. Belirtildiği gibi, bu çapraz platform değildir, Linux sistemlerinde çalışmayacaktır.


4
Bu kötü bir yaklaşım! Kod çapraz platform değildir, Linux sistemlerinde çalışmaz
GooDeeJaY

1

Herhangi bir kitaplık kullanmanıza gerek yok. Sadece sistemi yazın ("renk 4f");


4
Bu yalnızca pencereler ve IIRC, bu yalnızca tüm ekranı tek renk
yapacak

0

Tüm ekranın renkle doldurulmasını istemiyorsanız "system (" Color… ")" kullanmayın. Renkli metin oluşturmak için gerekli olan komut dosyası budur:

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

int main()
{
const WORD colors[] =
{
0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
};

HANDLE hstdin = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
WORD   index = 0;


    SetConsoleTextAttribute(hstdout, colors[index]);
    std::cout << "Hello world" << std::endl;
FlushConsoleInputBuffer(hstdin);
return 0;
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.