Hledáš dárek, který neskončí v koši? Nyní 90 % extra kreditů ZDARMA s promo kódem PREKVAPENI90. Zjisti více:
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Pokročilá práce s konzolí v C++

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Honza
Neregistrovaný
Avatar
Honza:20.10.2013 11:56

Díky moc. Hodně užitečný článek

Avatar
mmmmmmm11111145:12.1.2015 5:41

cav som tu novy takze zdravim :)

chalani hodte sem prosim funkcny cely kod, lebo tie farby su podla mna absolutne neprehladne a stale mi to nechce spustit :/

"system("color 12") funguje ako ma ale ostatne nie teda aspon neviem ako nanho"
vopred dakujem

Editováno
Avatar
Odpovídá na mmmmmmm11111145
Libor Šimo (libcosenior):11.3.2015 14:13
#include <iostream>
#include <windows.h>

//barvu získáme jako hodnotu barvy textu přičtenou k šestnáctinásobku hodnoty barvy pozadí
#define NOVA_FARBA SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), background_color*16+foreground_color)
#define ZELENA_FARBA SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), zelena)

typedef enum { cierna, tmavo_modra, tmavo_zelena, tmavo_azurova, tmavo_cervena, tmavo_purpurova, tmavo_zlta, seda, tmavo_seda,
               modra, zelena, azurova, cervena, purpurova, zlta, biela
} FARBA;

void set_text_color(int background_color, int foreground_color);
void colored_cout(int background_color, int foreground_color, const char* text);
void colored_cout(int background_color, int foreground_color, bool value);
void colored_cout(int background_color, int foreground_color, short number);
void colored_cout(int background_color, int foreground_color, int number);
void colored_cout(int background_color, int foreground_color, float number);
void colored_cout(int background_color, int foreground_color, double number);

using namespace std;

int main()
{
    set_text_color(biela, tmavo_azurova);
    cout << "Tento text je tmavo azurovy na bielom podklade" << endl;
    set_text_color(biela, cervena);
    cout << "Tento text je cerveny na bielom podklade" << endl;
    set_text_color(biela, modra);
    cout << "Tento text je modry na bielom podklade" << endl;
    set_text_color(modra, biela);
    cout << "Tento text je biely na modrom podklade" << endl;

    colored_cout(biela, modra, "Popokatepetl");
    cout << endl;
    colored_cout(cervena, modra, true);
    cout << endl;
    colored_cout(zlta, azurova, 25);
    cout << endl;
    colored_cout(seda, zlta, 258.658);
    cout << endl;

    /*for(int i = 0; i<16; i++) {
        for(int j = 0; j<16; j++) {
            colored_cout(i, j, i*16+j);
            colored_cout(i, j, " Hello world\n");
        }
    }*/

    cin.get();
    return 0;
}

void set_text_color(int background_color, int foreground_color)
{
        NOVA_FARBA;
}
void colored_cout(int background_color, int foreground_color, const char* text)
{
        NOVA_FARBA;//nová barva
        cout << text;
        ZELENA_FARBA;//nastavení původní (základní) barvy
}
void colored_cout(int background_color, int foreground_color, bool value)
{
        NOVA_FARBA;//nová barva
        cout << value;
        ZELENA_FARBA;//původní barva
}
void colored_cout(int background_color, int foreground_color, short number)
{
        NOVA_FARBA;//nová barva
        cout << number;
        ZELENA_FARBA;//původní barva
}
void colored_cout(int background_color, int foreground_color, int number)
{
        NOVA_FARBA;//nová barva
        cout << number;
        ZELENA_FARBA;//původní barva
}
void colored_cout(int background_color, int foreground_color, float number)
{
        NOVA_FARBA;//nová barva
        cout << number;
        ZELENA_FARBA;//původní barva
}
void colored_cout(int background_color, int foreground_color, double number)
{
        NOVA_FARBA;//nová barva
        cout << number;
        ZELENA_FARBA;//původní barva
}

Chcem sa ale spýtať.
Je vhodné používať také makrá aké som použil?

Editováno
Odpovědět
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
nf fn
Člen
Avatar
nf fn:14.7.2016 12:10

Myslím že v C++ se dají makra ve většině případů obejít a neměla by se používat.

Avatar
Zbyňa
Člen
Avatar
Zbyňa:9.4.2017 1:51

např const nebo template na fce

Avatar
Imrich Vízi
Člen
Avatar
Imrich Vízi:16.6.2019 17:38
void colored_cout(int background_color, int foreground_color, const char* text)
{
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), background_color*16+foreground_color);//nová barva
        cout << text;
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), grey);//nastavení původní (základní) barvy
}

Zrejme by mala byť použitá dereferencia

cout << *text;
Avatar
Odpovídá na Imrich Vízi
Zdeněk Pavlátka:17.6.2019 13:13

Neměla. char* je zde použito jako řetězec znaků ukončený nulovým znakem ('\0'). Dereferencí bychom vypsali jen jeho první znak (případně nulový znak, měl-li by řetězec nulovou délku). cout<<text; vypíše řetězec celý.

Editováno
Odpovědět
Kolik jazyků umíš, tolikrát jsi programátor.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.