C语言控制台输出字体颜色:方法详解与应用示例264


在C语言中,直接控制控制台输出文本的颜色并非语言本身自带的功能。标准的C库函数并没有提供设置文本颜色、背景色的接口。然而,我们可以通过调用操作系统提供的API函数来实现这一功能。 本文将详细介绍在Windows和Linux/Unix系统下,如何使用C语言改变控制台输出文本的颜色,并提供丰富的示例代码,帮助读者理解和应用。

一、Windows系统下的字体颜色控制

在Windows系统下,我们可以通过Windows API函数SetConsoleTextAttribute()来控制控制台文本的颜色。这个函数需要HANDLE类型的控制台句柄作为参数。 我们首先需要获取控制台句柄,然后使用SetConsoleTextAttribute()设置颜色属性。

以下是一个简单的示例代码:```c
#include
#include
int main() {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出句柄
if (hConsole == INVALID_HANDLE_VALUE) {
fprintf(stderr, "GetStdHandle failed!");
return 1;
}
WORD wAttributes = GetConsoleTextAttribute(hConsole); // 获取当前属性
// 设置文本颜色为红色
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);
printf("This text is red.");
// 恢复原来的颜色
SetConsoleTextAttribute(hConsole, wAttributes);
printf("This text is default color.");
// 设置文本颜色为绿色
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("This text is green.");
// 恢复原来的颜色
SetConsoleTextAttribute(hConsole, wAttributes);
printf("This text is default color.");
// 设置文本颜色为蓝色
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
printf("This text is blue.");

return 0;
}
```

在这个例子中,FOREGROUND_RED, FOREGROUND_GREEN, FOREGROUND_BLUE分别代表红色、绿色、蓝色的前景色(文本颜色),FOREGROUND_INTENSITY表示高亮度。 你可以通过组合这些常量来创建不同的颜色。例如,FOREGROUND_RED | FOREGROUND_GREEN 将产生黄色的文本。

二、Linux/Unix系统下的字体颜色控制

在Linux/Unix系统下,控制台颜色通常通过ANSI转义序列来实现。ANSI转义序列是一组特殊的字符序列,它们会被终端解释器识别并用于控制终端的输出。 这些序列以\033[开头,以m结尾,中间包含颜色代码。

以下是一个简单的示例代码:```c
#include
int main() {
// 红色文本
printf("\033[31mThis text is red.\033[0m"); // \033[0m 恢复默认颜色
// 绿色文本
printf("\033[32mThis text is green.\033[0m");
// 蓝色文本
printf("\033[34mThis text is blue.\033[0m");
// 黄色文本 (红色 + 绿色)
printf("\033[33mThis text is yellow.\033[0m");
// 背景颜色 (40-47代表不同背景颜色,与30-37类似)
printf("\033[41;37mThis text is white on red background.\033[0m");

return 0;
}
```

在这个例子中,\033[31m表示设置文本颜色为红色,\033[0m表示恢复默认颜色。 数字30-37代表不同的前景色,40-47代表不同的背景色。 你可以通过分号将前景色和背景色代码组合起来使用,例如\033[41;37m表示红色背景,白色文本。

三、跨平台解决方案

为了编写跨平台的C语言代码,我们可以使用预处理指令来根据不同的操作系统选择不同的代码段。 例如:```c
#ifdef _WIN32
// Windows代码
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
printf("This is red on Windows.");
SetConsoleTextAttribute(hConsole, GetConsoleTextAttribute(hConsole));
#else
// Linux/Unix代码
printf("\033[31mThis is red on Linux/Unix.\033[0m");
#endif
```

四、颜色代码表

以下是一些常用的ANSI颜色代码:| 代码 | 颜色 | 代码 | 颜色 |
|-----|------------|-----|------------|
| 30 | 黑色 | 40 | 黑色背景 |
| 31 | 红色 | 41 | 红色背景 |
| 32 | 绿色 | 42 | 绿色背景 |
| 33 | 黄色 | 43 | 黄色背景 |
| 34 | 蓝色 | 44 | 蓝色背景 |
| 35 | 紫色 | 45 | 紫色背景 |
| 36 | 青色 | 46 | 青色背景 |
| 37 | 白色 | 47 | 白色背景 |

五、总结

本文介绍了在Windows和Linux/Unix系统下使用C语言控制控制台输出字体颜色的方法。 通过使用Windows API或ANSI转义序列,我们可以轻松地为我们的C程序添加色彩,从而提高程序的可读性和用户体验。 记住在使用ANSI转义序列时,需要确保你的终端支持ANSI颜色代码。 选择合适的方案取决于你的目标平台和需求,对于跨平台应用,建议采用条件编译来实现代码的可移植性。

2025-09-18


上一篇:C语言函数求和:详解及进阶应用

下一篇:C语言getpass()函数详解:安全获取用户密码