如何在code :: blocks中更改文本颜色和控制台颜色?

我正在用C编写程序。我想在控制台中更改文本颜色和背景颜色。 我的示例程序是 –

#include  #include  #include  #include  #include  int main(int argc,char *argv[]) { textcolor(25); printf("\n \n \t This is dummy program for text color "); getch(); return 0; } 

当我编译这个程序代码:: blocks给我一个错误 – textcolor未定义。 为什么会这样? 我在GNU GCC编译器和Windows Vista中工作。 如果它不起作用什么是textcolor的副本。 就像我想要改变控制台的背景颜色。 编译器给出了同样的错误,只是函数的名称不同。 如何更改控制台和文本的颜色。 请帮忙。

即使答案是在C ++中,我也没关系。

textcolor这样的函数turbo CDev C等旧编译器中运行。 在今天的编译器中,这些function不起作用。 我将提供两个函数SetColorChangeConsoleToColors 。 您将这些函数代码复制粘贴到程序中并执行以下步骤。我给出的代码在某些编译器中不起作用。

SetColor的代码是 –

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

要使用此function,您需要从程序中调用它。 例如我正在拿你的示例程序 –

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

运行程序时,您将获得RED的文本颜色。 现在我要给你每种颜色的代码 –

 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 

现在我要给出ChangeConsoleToColors的代码。 代码是 –

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

在此function中,您传递两个数字。 如果你想要正常颜色,只需将第一个数字设为零,将第二个数字设为颜色即可。 我的例子是 -

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

在这种情况下,我将第一个数字设置为零,第二个数字设置为15,因此控制台颜色将为白色,因为白色的代码为15.这对我来说是代码:: blocks。 希望它也适合你。

你也可以使用rlutil :

  • 跨平台,
  • 仅标题( rlutil.h ),
  • 适用于C和C ++,
  • 实现setColor()cls()getch()gotoxy()等。
  • 许可证: WTFPL

你的代码会变成这样:

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

看一下example.c和test.cpp的C和C ++示例。

这是一个在线function,我用它创建了一个头文件,我使用Setcolor(); 相反,我希望这有帮助! 您可以通过选择0-256范围内的任何颜色来更改颜色。 :)遗憾的是,我相信CodeBlocks后来构建了window.h库…

 #include  //This is the header file for windows. #include  //C standard library header file void SetColor(int ForgC); int main() { printf("Test color"); //Here the text color is white SetColor(30); //Function call to change the text color printf("Test color"); //Now the text color is green return 0; } void SetColor(int ForgC) { WORD wColor; //This handle is needed to get the current background attribute HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; //csbi is used for wAttributes word if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //To mask out all but the background attribute, and to add the color wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F); SetConsoleTextAttribute(hStdOut, wColor); } return; } 

一个简单的方法……

 system("Color F0"); 

字母代表背景颜色,而数字代表文字颜色。

0 =黑色

1 =蓝色

2 =绿色

3 = Aqua

4 =红色

5 =紫色

6 =黄色

7 =白色

8 =灰色

9 =浅蓝色

A =浅绿色

B =浅水

C =浅红色

D =浅紫色

E =浅黄色

F =亮白色

system("COLOR 0A");

其中0A是背景和字体颜色0的组合

您应该先定义函数textcolor。 因为textcolor不是C中的标准函数。

 void textcolor(unsigned short color) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hcon,color); }