版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
简单的测试了下,满足要求,可能还存在问题,以后慢慢优化