自己实现的printf函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33706673/article/details/84729447

根据上一篇中的  《可变参数列表(非格式化控制)》,今天继续学习:

自己写一个函数实现printf功能。

1.自己实现的printf函数

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

void my_printf(const char *str,...)
{
	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
		{
			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);
}
int main()
{
	my_printf("");
	my_printf("11 %%\n");
	my_printf("22 hello\n");
	my_printf("33 c=%c,ui=%u,i=%d,f=%f,d=%lf\n",'A',123,-234,3.14,6.66);
	
	
	return 0;
}

简单的测试了下,满足要求,可能还存在问题,以后慢慢优化

猜你喜欢

转载自blog.csdn.net/qq_33706673/article/details/84729447