模拟实现printf函数(可变参数)

一.printf功能:
printf函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。
printf原型:int printf( const char* format , [argument] … );
我们可以利用可变参数列表模拟实现printf
二.printf函数分析:
printf函数的参数是不确定的,传参的地方必须使用其他东西
我们可以利用stdarg宏来解决可变参数问题
头文件:<stdarg.h>
va_list;
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
void va_start( va_list arg_ptr, prev_param );

三.代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<assert.h>
#pragma warning(disable:4996)
void myprintf(const char*format, ...)
{
    assert(format);
    va_list arg;
    va_start(arg,format);
    while (*format)
    {
        if (*format == '%')
        {
            format++;
            switch (*format)
            {
            case's':
            {
                       char*s = va_arg(arg, char*);
                       puts(s);
            }
                break;
            case'd':
            {
                    int q = va_arg(arg, int);//此处返回整型
                    putchar(q + '0');
            }
                break;
            case'c':
            {
                       char c = va_arg(arg,char);
                       putchar(c);
            }
                break;
            case'f':
            {
                       float f = va_arg(arg,char);

            }
                break;
            case'%':
            {
                       putchar('%');
            }
                break;
            default:
                puts("format error!\n");
                break;
            }
        }
        else if (*format == '\\')
        {
            format++;
            if (*format == 'n')
            {
                puts("");
            }
        }
else
{
    putchar(*format);
}
        format++;
    }
    va_end(arg);
}
int main()
{
    char c = 'c';
    char *s = "hello world";
    myprintf("hello %c, hello %s\n", c , s);
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值