[C] Textfarbe in Eingabeaufforderung ändern?

Schüffl

Lt. Commander
Registriert
März 2004
Beiträge
1.881
Hallo!

Ich habe mir ein Programm geschrieben, welches in 100 Lottoreihen prüft, wieviele Richtige dabei sind. Das Ergebnis wird mit Zeilenangabe und den Zahlen auf dem Bildschirm (Eingabeaufforderung) ausgegeben. Nun wollte ich gerne als "Tüpfelchen auf dem i" die richtigen Zahlen in einer anderne Farbe (grün) anzeigen lassen. Also dass dann in der Ausgabe alle Zahlen stehen und die, die übereinstimmen grün dargestellt werden.
ICh vermute mal, dass das in c nicht so einfach sein wird, oder?
Falls da jemand ne Idee hat.. Danke schonmal! ;)

MfG
Schüffl
 
Code:
#define WHITE '0'    // White on Black
#define RED '1'    // Red on Black
#define GREEN '2'   // Green on Black
#define YELLOW '3'   // Yellow on Black
#define BLUE '4'    // Blue on Black
#define MAGENTA '5'    // Magenta on Black
#define CYAN '6'    // Cyan on Black
#define BLACKOG '7'    // Black on Gray
#define BACKOW '8'    // Black on White
#define REDOW '9'    // Red on White
#define GREENOW 'A'    // Green on White
#define YELLOWOW 'B'    // Yellow on White
#define BLUEOW 'C'    // Blue on White
#define MAGENTAOW 'D'    // Magenta on White
#define CYANOW 'E'    // Cyan on White
#define WHITEOW 'F'    // White on White

#ifdef WIN32
#include <windows.h>
//ändert die ausgabefarbe in der konsole
void TextColor(char color)
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    switch (color)
    {
        case '0':    // White on Black
        SetConsoleTextAttribute(hStdOut,
                                FOREGROUND_INTENSITY | FOREGROUND_RED |
                                FOREGROUND_GREEN | FOREGROUND_BLUE);
        break;
        case '1':    // Red on Black
        SetConsoleTextAttribute(hStdOut,
                                FOREGROUND_INTENSITY | FOREGROUND_RED);
        break;
        case '2':    // Green on Black
        SetConsoleTextAttribute(hStdOut,
                                FOREGROUND_INTENSITY | FOREGROUND_GREEN);
        break;
        case '3':    // Yellow on Black
        SetConsoleTextAttribute(hStdOut,
                                FOREGROUND_INTENSITY | FOREGROUND_RED |
                                FOREGROUND_GREEN);
        break;
        case '4':    // Blue on Black
        SetConsoleTextAttribute(hStdOut,
                                FOREGROUND_INTENSITY | FOREGROUND_BLUE);
        break;
        case '5':    // Magenta on Black
        SetConsoleTextAttribute(hStdOut,
                                FOREGROUND_INTENSITY | FOREGROUND_RED |
                                FOREGROUND_BLUE);
        break;
        case '6':    // Cyan on Black
        SetConsoleTextAttribute(hStdOut,
                                FOREGROUND_INTENSITY | FOREGROUND_GREEN |
                                FOREGROUND_BLUE);
        break;
        case '7':    // Black on Gray
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | BACKGROUND_INTENSITY);
        break;
        case '8':    // Black on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE);
        break;
        case '9':    // Red on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE |
                                FOREGROUND_RED);
        break;
        case 'A':    // Green on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE | FOREGROUND_GREEN);
        break;
        case 'B':    // Yellow on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE | FOREGROUND_RED |
                                FOREGROUND_GREEN);
        break;
        case 'C':    // Blue on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE | FOREGROUND_BLUE);
        break;
        case 'D':    // Magenta on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE | FOREGROUND_RED |
                                FOREGROUND_BLUE);
        break;
        case 'E':    // Cyan on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE | FOREGROUND_GREEN |
                                FOREGROUND_BLUE);
        break;
        case 'F':    // White on White
        SetConsoleTextAttribute(hStdOut,
                                BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                                BACKGROUND_RED | BACKGROUND_GREEN |
                                BACKGROUND_BLUE | FOREGROUND_RED |
                                FOREGROUND_GREEN | FOREGROUND_BLUE);
        break;
        default :    // White on Black
        SetConsoleTextAttribute(hStdOut, FOREGROUND_RED |
                                FOREGROUND_GREEN | FOREGROUND_BLUE);
        break;
    }
}
#else //WIN32
void TextColor(char color)
{
    switch (color)
    {
        case '0':    // White on Black
        printf("\033[37m");
        printf("\033[40m");
        break;
        case '1':    // Red on Black
        printf("\033[31m");    
        printf("\033[40m");    
        break;
        case '2':    // Green on Black
        printf("\033[32m");
        printf("\033[40m");
        break;
        case '3':    // Yellow on Black
        printf("\033[33m");
        printf("\033[40m");
        break;
        case '4':    // Blue on Black
        printf("\033[34m");
        printf("\033[40m");
        break;
        case '5':    // Magenta on Black
        printf("\033[35m");
        printf("\033[40m");
        break;
        case '6':    // Cyan on Black
        printf("\033[36m");
        printf("\033[40m");
        break;
        case '7':    // Black on Gray
        printf("\033[30m");
        printf("\033[47m");
        break;
        case '8':    // Black on White
        printf("\033[30m");
        printf("\033[47m");
        break;
        case '9':    // Red on White
        printf("\033[41m");
        printf("\033[47m");
        break;
        case 'A':    // Green on White
        printf("\033[42m");
        printf("\033[47m");
        break;
        case 'B':    // Yellow on White
        printf("\033[43m");
        printf("\033[47m");
        break;
        case 'C':    // Blue on White
        printf("\033[44m");
        printf("\033[47m");
        break;
        case 'D':    // Magenta on White
        printf("\033[45m");
        printf("\033[47m");
        break;
        case 'E':    // Cyan on White
        printf("\033[46m");
        printf("\033[47m");
        break;
        case 'F':    // White on White
        printf("\033[47m");
        printf("\033[47m");
        break;
        default :    // White on Black
        printf("\033[40m");
        printf("\033[37m");
        break;
    }
}
#endif

Ich bin mir nur leider nicht sicher ob das nun für C gilt. Unter C++ tut es auf jeden fall...
 
hm, das sieht sehr nach C++ aus. Aber ich werds mal versuchen. Ich glaube fast, das is als "nebenbei-Spielerei" ein wenig zu aufwändig. *g*
Ich benutze MS Visual Studio .NET 2003 Professional.
Naja, trotzdem schonmal danke für die Antworten! :)


EDIT: Danke, das geht! Vielen Dank!! :)
 
Zuletzt bearbeitet:
Dass mein Vorschlag in deinem Falle viel zu Aufwändig ist, ist mir klar. Aber ich habe die Funktionen gerade so oder so vor mir gehabt und kurzerhand hier reinkopiert ;)

Du kannst ja nur den Teil fürs Grün nehmen. Ich brauche im Moment nur leider ein paar mehr Farben :)

Und die Linuxunterstützung brauchst du wohl anscheinend auch nicht...
 
Zurück
Oben