在windows下,带控制文本颜色的printf实现!

函数基于某个博客实现的printf,对其函数内部增加了对文本颜色的控制。

原博客地址:自己实现的printf函数_行者三个石的博客-CSDN博客_自己实现printf函数

 

说明:

用法:将my_print.h头文件添加,即可使用!

注意事项:

1、无法对浮点数进行小数点后数量的精度控制。

2、使用时必须要设置文本颜色参数,默认设置为NULL

 

示例代码

#include <iostream>
#include "my_print.h"
using namespace std;

int main(int argc, char* argv[])
{
	myPrint("adf:%f\n", NULL, 12.00);

	myPrint("adf:%s\n", RED, "hello");
	myPrint("adf:%d\n", GREEN, 999);
	myPrint("adf:%c\n", BLUE, 'C');
	
	return 0;
}

 

 

my_print.h实现代码

#include <stdio.h>
#include <stdarg.h>
#include <Windows.h>

//文本颜色定义
#define RED		1	//红
#define GREEN	2	//绿
#define BLUE	3	//蓝
#define DEFAULT	0	//默认颜色	与 textColor填入NULL 等价

void myPrint(const char *str, int textColor, ...)
{
	//设置文本颜色
	if (textColor == RED)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
	}
	else if (textColor == GREEN)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
	}
	else if (textColor == BLUE)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
	}


	va_list var;
	char c = 0;
	unsigned int ui = 0;
	int i = 0;
	float f = 0;
	double d = 0;
	char *s = NULL;

	va_start(var, str);

	while ('\0' != *str)
	{
		if ('%' != *str)
		{
			printf("%c", *str);
			str++;
			continue;
		}
		else
		{
			//va_arg函数返回ap当前指向的参数的值
			//每次调用va_arg后,ap就会指向下一个参数

			(char)va_arg(var, int);//过滤掉第一个颜色参数

			switch (*(++str))
			{
			case 'c':
				c = (char)va_arg(var, int);
				printf("%c", c);
				break;

			case 'u':
				ui = (unsigned int)va_arg(var, int);
				printf("%u", ui);
				break;

			case 'd':
				i = va_arg(var, int);
				printf("%i", i);
				break;

			case 'f':
				f = (float)va_arg(var, double);
				printf("%f", f);
				break;

			case 'l':
				if ('f' == *(str + 1))
				{
					d = va_arg(var, double);
					printf("%lf", d);
					str++;
				}
				break;

			case 's':
				s = (char*)va_arg(var, char*);
				printf("%s", s);
				break;

			default:
				printf("%c", *str);
				break;
			}
			str++;
		}

	}

	va_end(var);

	//恢复初始颜色
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值