C语言利用可变参数实现简单printf函数

本文详细介绍如何从零开始实现一个类似于C语言中printf的功能。通过解析格式字符串,处理各种类型如整数、浮点数、字符及字符串的输出,提供了一个自定义的打印函数实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值