Recuerda que en la informática cualquier problema casi siempre tiene varias resoluciones, no obstante aquí enseñamos la mejor y más óptimo.
Solución:
Funciones como color de texto trabajó en compiladores antiguos como turbo C y Dev C. En los compiladores actuales, estas funciones no funcionarían. Te voy a dar dos funcion SetColor y ChangeConsoleToColors. Copie y pegue el código de estas funciones en su programa y siga los siguientes pasos. El código que estoy dando no funcionará en algunos compiladores.
El código de SetColor es –
void SetColor(int ForgC)
WORD wColor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//We use csbi for the wAttributes word.
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
//Mask out all but the background attribute, and add in the forgournd color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
return;
Para utilizar esta función, debe llamarla desde su programa. Por ejemplo, estoy tomando su programa de muestra:
#include
#include
#include
#include
#include
int main(void)
SetColor(4);
printf("n n t This text is written in Red Color n ");
getch();
return 0;
void SetColor(int ForgC)
WORD wColor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//We use csbi for the wAttributes word.
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
//Mask out all but the background attribute, and add in the forgournd color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
return;
Cuando ejecute el programa obtendrá el color del texto en ROJO. Ahora te voy a dar el código de cada color –
Name | Value
|
Black | 0
Blue | 1
Green | 2
Cyan | 3
Red | 4
Magenta | 5
Brown | 6
Light Gray | 7
Dark Gray | 8
Light Blue | 9
Light Green | 10
Light Cyan | 11
Light Red | 12
Light Magenta| 13
Yellow | 14
White | 15
Ahora te voy a dar el código de ChangeConsoleToColors. El código es –
void ClearConsoleToColors(int ForgC, int BackC)
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
//Get the handle to the current output buffer...
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
//This is used to reset the carat/cursor to the top left.
COORD coord = 0, 0;
//A return value... indicating how many chars were written
// not used but we need to capture this since it will be
// written anyway (passing NULL causes an access violation).
DWORD count;
//This is a structure containing all of the console info
// it is used here to find the size of the console.
CONSOLE_SCREEN_BUFFER_INFO csbi;
//Here we will set the current color
SetConsoleTextAttribute(hStdOut, wColor);
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
//This fills the buffer with a given character (in this case 32=space).
FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
//This will set our cursor position for the next print statement.
SetConsoleCursorPosition(hStdOut, coord);
return;
En esta función pasas dos números. Si desea colores normales, coloque el primer número como cero y el segundo número como color. Mi ejemplo es
#include //header file for windows
#include
void ClearConsoleToColors(int ForgC, int BackC);
int main()
ClearConsoleToColors(0,15);
Sleep(1000);
return 0;
void ClearConsoleToColors(int ForgC, int BackC)
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
//Get the handle to the current output buffer...
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
//This is used to reset the carat/cursor to the top left.
COORD coord = 0, 0;
//A return value... indicating how many chars were written
// not used but we need to capture this since it will be
// written anyway (passing NULL causes an access violation).
DWORD count;
//This is a structure containing all of the console info
// it is used here to find the size of the console.
CONSOLE_SCREEN_BUFFER_INFO csbi;
//Here we will set the current color
SetConsoleTextAttribute(hStdOut, wColor);
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
//This fills the buffer with a given character (in this case 32=space).
FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
//This will set our cursor position for the next print statement.
SetConsoleCursorPosition(hStdOut, coord);
return;
En este caso, puse el primer número como cero y el segundo número como 15, por lo que el color de la consola será blanco, ya que el código para el blanco es 15. Esto me funciona en code :: blocks. Espero que funcione para usted también.
También puede usar rlutil:
- plataforma cruzada,
- solo encabezado
rlutil.h
), - funciona para C y C ++,
- implementos
setColor()
,cls()
,getch()
,gotoxy()
etc. - Licencia: WTFPL
Tu código se convertiría en algo como esto:
#include
#include "rlutil.h"
int main(int argc, char* argv[])
setColor(BLUE);
printf("n n t This is dummy program for text color ");
getch();
return 0;
Eche un vistazo a example.cy test.cpp para ejemplos de C y C ++.
Lo sé, llego muy tarde, pero puede que mi respuesta pueda ayudar a alguien. Básicamente es muy simple. Aquí está mi código.
#include
#include
using namespace std;
int main()
HANDLE colors=GetStdHandle(STD_OUTPUT_HANDLE);
string text;
int k;
cout<<" Enter your Text : ";
getline(cin,text);
for(int i=0;i9 ? k=0 : k++;
if(k==0)
SetConsoleTextAttribute(colors,1);
else
SetConsoleTextAttribute(colors,k);
cout<
PRODUCCIÓN
Esta imagen le mostrará cómo funciona.
Si desea el tutorial completo, vea mi video aquí: Cómo cambiar el color del texto en C ++