C语言利用可变参数实现简单printf函数
程序员文章站
2022-03-07 16:17:24
...
我们知道C中,printf的参数是可变的。如果你不知道可变参数请看
关于C语言可变参数函数的写法及其应用
今天给大家带来的是怎么实现自己的printf函数。
思路就是一个一个的读取字符串,当遇到%的时候特别注意一下就行了。同时要注意,可变参数在传递的时候,char 会提升为 int, float会提升为double,字符串用 char* ,其他的都比较简单。
void Print(char* Ptr, ...); /myprintf
void print_inter(int num); //打印一个整形
void print_float(float num);//打印浮点型,小数点后两位
int main(int argc, char *argv[])
{
Print("%d,%c,%f,%s",45,'A',12.08,"MyPrintf");
return 0;
}
void Print(char* Ptr, ...)
{
char str;
char operation;
va_list v1;
va_start(v1,Ptr);
while(*Ptr != '\0')
{
str = *Ptr;
if(str == '%')
{
operation = *(++Ptr);
switch (operation) {
case 'd':
{
print_inter(va_arg(v1,int));
}
break;
case 'f':
{
print_float(va_arg(v1, double));
}
break;
case 's':
{
char* cc = va_arg(v1, char*);
while(*cc != '\0')
{
putchar(*cc++);
}
}
break;
case 'c':
{
putchar(va_arg(v1, int));
}
break;
default:
break;
}
}else
{
putchar(str);
}
Ptr++;
}
va_end(v1);
}
void print_inter(int num) //递归打印整数
{
if(num > 0)
{
int pnum = num % 10;
print_inter(num/10);
putchar(pnum+'0');
}
}
void print_float(float num)
{
int lnum = num;
int rnum = (num-lnum)*100;
print_inter(lnum);
putchar('.');
if(rnum < 10)
{
putchar('0');
}
print_inter(rnum);
}
上一篇: spring整合rabbitmq
下一篇: RabbitMQ高级面试题