关于C语言printf输出颜色的问题.

本文详细介绍了如何在C语言中使用控制台打印带有颜色的文字。通过定义一系列宏,可以轻松地改变输出文本的颜色,包括红、黄、绿等。然而,直接运行可能会遇到显示问题,文中提供了解决方案,只需在主函数开始处调用清屏函数即可正常显示颜色。此方法在Linux环境下同样适用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define NONE "\033[m"

#define RED "\033[0;32;31m"

#define LIGHT_RED "\033[1;31m"

#define GREEN "\033[0;32;32m"

#define LIGHT_GREEN "\033[1;32m"

#define BLUE "\033[0;32;34m"

#define LIGHT_BLUE "\033[1;34m"

#define DARY_GRAY "\033[1;30m"

#define CYAN "\033[0;36m"

#define LIGHT_CYAN "\033[1;36m"

#define PURPLE "\033[0;35m"

#define LIGHT_PURPLE "\033[1;35m"

#define BROWN "\033[0;33m"

#define YELLOW "\033[1;33m"

#define LIGHT_GRAY "\033[0;37m"

#define WHITE "\033[1;37m"

以上代码定义了printf打印颜色的宏

如果你需要打印带有颜色的文字那么只需要:

printf(RED"i am red\n");就可以输出红色的字体。

#include <stdio.h>


#define RED "\033[0;32;31m"
#define NONE "\033[m"
#define YELLOW "\033[1;33m"

int main()
{
	printf(RED"i am red!\n"NONE);
	printf(YELLOW"i am yello!\n"NONE);
	system("pause");
	return 0;
}

但是结果出乎意料:

但是我们修改一下代码就可以使用上面方法。(在主函数前面加一个system("cls");由于它是清屏函数,在主函数开头加这个函数,对后续的打印无伤大雅,但是我们却可以使用这种办法打印颜色了。)(具体的原因还有待研究,但是问题解决了。)

#include <stdio.h>


#define RED "\033[0;32;31m"
#define NONE "\033[m"
#define YELLOW "\033[1;33m"

int main()
{
	system("cls");
	printf(RED"i am red!\n"NONE);
	printf(YELLOW"i am yello!\n"NONE);
	system("pause");
	return 0;
}

结果:

 

 

 

PS:另外这个方法在linux底下是没有啥问题的。

结果:

### C语言控制台输出文字颜色设置方法 在C语言中,可以通过调用Windows API来更改控制台中的文字颜色。以下是几种常见的实现方式: #### 使用 `SetConsoleTextAttribute` 函数 通过 `windows.h` 头文件提供的 `SetConsoleTextAttribute` 函数可以灵活地调整控制台文字的颜色和背景色。 ```c #include <stdio.h> #include <windows.h> int main() { // 获取标准输出句柄 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // 设置红底白字 SetConsoleTextAttribute(hConsole, 0xC7); puts("Hello, World!"); // 将文字设置为红色 SetConsoleTextAttribute(hConsole, 0xC); puts("将文字设置为红色"); // 将文字设置为白色 SetConsoleTextAttribute(hConsole, 0xF); puts("将文字设置为白色"); system("pause"); return 0; } ``` 此代码展示了如何使用不同的属性值[^1] 来改变文字的颜色和背景色。 --- #### 自定义函数实现局部颜色变化 如果需要更方便地切换不同颜色,可以封装一个自定义函数 `color(x)`,其中参数 `x` 表示颜色编码(范围为0-15)。以下是一个例子: ```c #include <stdio.h> #include <windows.h> void color(short x) { if (x >= 0 && x <= 15) { // 参数在0-15范围内有效 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); } else { // 默认颜色为白色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); } } int main() { color(6); // 黄色 printf("\n这是黄色\n"); color(4); // 红色 printf("\n这是红色\n"); return 0; } ``` 该方法允许动态调整局部区域的文字颜色[^2]。 --- #### 利用 `system()` 命令快速更改全局颜色 对于简单的场景,可以直接利用 `system()` 调用命令行工具 `color` 更改整个控制台的前景色和背景色。例如: ```c #include <stdlib.h> #include <stdio.h> int main(void) { int ret; // 修改控制台颜色为绿色前景、蓝色背景 ret = system("color 24"); if (ret == 0) { printf("Changed console color is ok.\n"); } else { printf("Error!!!\n"); } return 0; } ``` 注意:这种方法仅适用于 Windows 平台,并且会覆盖当前窗口的整体配色方案[^3]。 --- ### 总结 以上三种方法各有优劣: - **第一种**适合精确控制每一段文字的颜色; - **第二种**便于多次重复调用同一功能; - **第三种**则用于简单场合下的整体风格设定。 开发者应根据实际需求选择合适的解决方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值