C ++ के साथ कंसोल में कलरिंग टेक्स्ट


98

मैं C ++ के साथ कंसोल पर रंगीन टेक्स्ट कैसे लिख सकता हूं? यही है, मैं अलग-अलग रंगों के साथ अलग-अलग पाठ कैसे लिख सकता हूं?


सी ++ कंसोल में अलग-अलग रंगों को खोजने के लिए कोई संसाधन नहीं था :)
सुदंथा

2
C ++ कंसोल क्या है ??
एडवर्ड स्ट्रेंज

की संभावित डुप्लिकेट: stackoverflow.com/questions/3585846/…
karlphillip

इन उत्तरों से सावधान रहें। यदि आप उन्हें स्वयं वापस नहीं करते हैं तो कार्यक्रम से बाहर निकलने के बाद आपके कंसोल में परिवर्तन होंगे।
kayleeFrye_onDeck

जवाबों:


122

अपने कंसोल पाठ में थोड़ा रंग जोड़ें

  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;
  }

वैकल्पिक शब्द

चरित्र विशेषताएँ यहाँ बताया गया है कि "k" मान की व्याख्या कैसे की जाती है।


41
ध्यान दें कि यह केवल Windows है।
डार्कडस्ट ऑक्ट

2
क्या होगा अगर मैं एक लाइन में कई रंग जोड़ना चाहता हूँ ?.
फड़वा

3
@ मिसाकी मैंने परीक्षण नहीं किया है लेकिन क्या आप 'एंडल' बिट को हटाने की कोशिश कर सकते हैं?
शीन

3
HANDLE वर्ग को जानने के लिए मुझे किस लाइब्रेरी की आवश्यकता है?
एसटीएफ

2
@STF सिर्फ <windows.h>
Sheen

36

ANSI बच रंग कोड:

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 ++ के लिए नमूना कोड:

#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;
}

जीसीसी:

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, और अपनी मुक्ति कोड है कर रहे हैं मेरे लिए काम है, लेकिन यह है कि आप अग्रभूमि मिल गया है और पृष्ठभूमि कोड उलट मुझे ऐसा लगता है। क्या आप कृपया शीर्षकों 'FG' और 'BG' को उलटा कर सकते हैं?
yamex5

मुझे @ yamex5 से सहमत होना है
smoothware

हाय yamex5 और smoothware, धन्यवाद, ठीक है
मेहदी मोहम्मदपुर

23

मानक C ++ में 'रंगों' की कोई धारणा नहीं है। तो आप जो पूछ रहे हैं वह ऑपरेटिंग सिस्टम पर निर्भर करता है।

Windows के लिए, आप SetConsoleTextAttribute फ़ंक्शन देख सकते हैं ।

* निक्स पर, आपको एएनएसआई एस्केप सीक्वेंस का उपयोग करना होगा ।


3
ध्यान दें कि ASNI सीक्वेंस (या उनमें से कम से कम) विंडोज के CMD.EXE पर भी काम करते हैं।
निधि मोनिका का मुकदमा

3
@ लेकिन, वे Win10 की सालगिरह संस्करण से पहले नहीं हैं। यदि आपका Win10 हमें अप-टू-डेट करता है, तो आपके पास यह है।
kayleeFrye_onDeck

7

आप तरीके लिख सकते हैं और इस तरह से कॉल कर सकते हैं


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
ध्यान दें कि SetConsoleTextAttribute(hConsole, 15);सेट रंग करने के लिए ब्राइट व्हाइट , नहीं व्हाइट7 - सफेद। और 15 - ब्राइट व्हाइट
GooDeeJaY

5

विंडोज 10 पर आप इस तरह से बच दृश्यों का उपयोग कर सकते हैं:

#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

मान लें कि आप Windows कंसोल विंडो के बारे में बात कर रहे हैं, MSDN लाइब्रेरी दस्तावेज़ में कंसोल फ़ंक्शन देखें।

अन्यथा, या अधिक सामान्यतः, यह कंसोल पर निर्भर करता है। रंग C ++ लाइब्रेरी द्वारा समर्थित नहीं हैं। लेकिन कंसोल हैंडलिंग के लिए एक पुस्तकालय रंगों का समर्थन / कर सकता है। उदा। Google "ncurses colours"।

जुड़े सीरियल टर्मिनलों और टर्मिनल एमुलेटर के लिए आप "एस्केप सीक्वेंस" आउटपुट करके चीजों को नियंत्रित कर सकते हैं। ये आम तौर पर ASCII 27 (ASCII में भागने के पात्र) से शुरू होते हैं। एक एएनएसआई मानक और बहुत सारी कस्टम योजनाएं हैं।


चूंकि यह उत्तर लिखा गया था, संकीर्ण कंसोल धाराओं के लिए एएनएसआई से बचने के क्रम के लिए विंडोज 10 को समर्थन मिला।
चीयर्स एंड हीथ। - अल्फ

3

सबसे आसान तरीका है जो आप कर सकते हैं:

#include <stdlib.h>

system("Color F3");

जहाँ "F" बैकग्राउंड कलर के लिए कोड है और 3 टेक्स्ट कलर के लिए कोड है।

अन्य रंग संयोजन देखने के लिए इसके साथ मेस करें:

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;

नोट: मैंने केवल विंडोज पर परीक्षण किया है। काम करता है।


3
यह एक बुरा तरीका है! कोड क्रॉस-प्लेटफ़ॉर्म नहीं है, यह लिनक्स सिस्टम में काम नहीं करेगा
GooDeeJaY

2

मुझे यकीन नहीं है कि आप वास्तव में क्या करना चाहते हैं, लेकिन मेरा अनुमान है कि आप अपने सी ++ प्रोग्राम को रंगीन टेक्स्ट को कंसोल में आउटपुट करना चाहते हैं, है ना? विंडोज के बारे में नहीं जानते, लेकिन सभी यूनियनों (मैक ओएस एक्स सहित) पर, आप बस उसके लिए एएनएसआई से बच दृश्यों का उपयोग करेंगे।


2

विंडोज में, आप अग्रभूमि (पाठ) और पृष्ठभूमि पर लाल हरे और नीले रंग के किसी भी संयोजन का उपयोग कर सकते हैं।

/* 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;

स्रोत: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes


1

आपको किसी भी पुस्तकालय का उपयोग करने की आवश्यकता नहीं है। केवल सिस्टम लिखें ("रंग 4f");


3
यह केवल विंडोज़ है, और IIRC यह पूरी स्क्रीन को एक रंग बना देगा
nathanfranke

0

यदि आप पूरी स्क्रीन को रंग से भरना नहीं चाहते हैं तो "सिस्टम (" कलर ... ") का उपयोग न करें। यह रंगीन पाठ बनाने के लिए आवश्यक स्क्रिप्ट है:

#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;
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.