欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
}
相关标签: C