Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: cout ja väri

Sivun loppuun

DumTom [01.07.2010 21:37:59]

#

Opetan 12-vuotiasta C/C++ kielen saloihin.
Eli miten näiden perusjuttujen kanssa vaihdetaan tekstin väriä?

Metabolix [01.07.2010 21:48:32]

#

Ei vaihdeta. Jos värejä on kuitenkin ihan pakko saada, voi tutustua Curses-kirjastoon (Linuxille ncurses, Windowsille PDCurses), jolla ohjelmointi on kuitenkin jo aivan toista kuin C++:n standardikirjastolla. Lisäksi löytyy kaikenlaisia ajoympäristöstä riippuvaisia kikkailuja, joiden käyttöä ilman kunnon pohjatietoja en suosittele.

Jokotai [01.07.2010 22:30:52]

#

Jos sinulla on kääntäjänä VS voit käyttää CMD:in color parametriparametri komentoa. Mutta se vaihtaa koko ruudun tekstin väriä.

-tossu- [02.07.2010 11:54:31]

#

Ainakin Linuxissa pystyy käyttämään terminaaliemulaattorin värejä.

#include <iostream>

using namespace std;
int main () {
	cout << "\033[0;32m<foobar>\033[0m <-- vihreää tekstiä" << endl;
	return 0;
}

fronty [02.07.2010 17:30:32]

#

-tossu-: Kyseessä ei ole "terminaaliemulaattorin värit", vaan ANSI escape sequencet. Tuki niille riippuu täysin terminaalista, jota emuloidaan. En suosittelisi käyttämään suoraan ANSI escape sequenceja ilman niiden tuen tarkistamista terminfolla/termcapilla tai käyttää suoraan cursesia, kun asia on siellä jo toteutettuna. Ei ole mukavaa, kun ohjelma suoltaa terminaalille käsittämätöntä tauhkaa, mistä täytyy greppailla järkevä sisältö.

Lahha [02.07.2010 17:33:05]

#

Windowsissa noilla.

SetConsoleTextAttribute
http://msdn.microsoft.com/en-us/library/ms686047.aspx

SetConsoleCursorPosition
http://msdn.microsoft.com/en-us/library/ms686025.aspx

#include <iostream>
#include <stdlib.h>
#include <Windows.h>

int main(int c, char **v)
{

	HANDLE hKonsoli =  GetStdHandle(STD_OUTPUT_HANDLE);

	SetConsoleTextAttribute(hKonsoli, FOREGROUND_RED|FOREGROUND_INTENSITY);
	std::cout << "kirkas punanen" << std::endl ;

	COORD paikka;
	paikka.X = 10;
	paikka.Y = 8;

	SetConsoleCursorPosition(hKonsoli, paikka);
	std::cout << "Rivi 8, kohta 10" << std::endl ;

	system("PAUSE");

	return 0;
}

-tossu- [02.07.2010 17:48:39]

#

Ensimmäisestä viestistä sain sellaisen käsityksen, että kyseessä on aivan aloittelija, joka haluaa vain vaihtaa tekstin väriä, eikä niitä ohjelmia ei ole tarkoitus julkaista. Silloin tuo minun esittämäni tapa lienee "oikeaa" tapaa huomattavasti helpompi. Missään julkaistavassa ohjelmassa sitä, tai värejä muutenkaan, tuskin kannattaa käyttää.

Metabolix [02.07.2010 20:21:22]

#

-tossu- kirjoitti:

Tuo minun esittämäni tapa lienee "oikeaa" tapaa huomattavasti helpompi.

Niin varmasti on, mutta Windowsissa – jota varsinkin monet aloittelijat käyttävät – se ei tietääkseni toimi.

-tossu- kirjoitti:

Missään julkaistavassa ohjelmassa sitä, tai värejä muutenkaan, tuskin kannattaa käyttää.

Miten niin? Jopa Linuxin perustyökalut (kuten ls) osaavat pyydettäessä käyttää värejä havainnollistamaan tulostetta, eikä tämä ole minusta lainkaan huono asia. Toki värityksen kannattaa olla jollain tavalla tarkoituksenmukaista eikä vain "hienoa ja hauskaa".

-tossu- [02.07.2010 20:31:33]

#

Tarkoitin kommentillani juuri turhaa värien käyttöä, jollaista se todennäköisesti aloittelijan ohjelmassa olisi. Joissain paikoissa värit tosiaan ovat perusteltuja (esim. ls josta näkee suoraan ilman -l parametria, onko kyseessä tiedosto vai kansio, onko sillä x-bitti jne.)

fronty [02.07.2010 20:34:36]

#

Metabolix kirjoitti:

Miten niin? Jopa Linuxin perustyökalut (kuten ls) osaavat pyydettäessä käyttää värejä havainnollistamaan tulostetta, eikä tämä ole minusta lainkaan huono asia.

Värejä sun muita vastaavia toteuttaessa kannattaa aina muistaa tuo /pyydettäessä/. Aina löytyy meitä, joita ls:n tulostama sademetsä häiritsee.

Blaze [04.07.2010 00:49:06]

#

fronty kirjoitti:

Aina löytyy meitä, joita ls:n tulostama sademetsä häiritsee.

Joo, jotkut ihmeelliset ihmiset ei käytä irssissäkään nickcolor.pl:ää.

fronty [04.07.2010 12:48:57]

#

irssistä otetaankin kaikki ilo irti, jos irkata haluaa yksinkertasella softalla, niin eikö saman tien voi sitten napata irc.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta