1. 程式人生 > >自己實現的printf函式

自己實現的printf函式

根據上一篇中的  《可變引數列表(非格式化控制)》,今天繼續學習:

自己寫一個函式實現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;
}

簡單的測試了下,滿足要求,可能還存在問題,以後慢慢優化