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

我们知道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);
}

猜你喜欢

转载自blog.csdn.net/canhelove/article/details/83443735
今日推荐