C和指针第七章第五题

实现一个简化的printf函数,能够处理%d,%f,%s,%c等格式。

/*************************************************************************
    > Created Time: 2014年06月17日 星期二 23时22分34秒
 ************************************************************************/

#include<stdio.h>
#include<stdarg.h>
#include<stdlib.h>

//输出普通的字符串
int printStr(char const *str)
{
    int len = 0;
    while(*str != '')
    {
        putchar(*str++);
        len++;
    }
    return len;
}

//说明,一个简化的printf函数,这个函数是能够%d,%c,%f,%s等格式。其他格式均是未定义的。
int MyPrintf(char const *format,...)
{
    int len = 0;
    int sublen;
    va_list vlist;
    va_start(vlist,format);//获取第一个参数首地址

    while(*format != '')
    {
        char data[50];
        int sublen = 1;
        if(*format++ == '%')
        {
            if(*format == 'd')
            {
                int d = va_arg(vlist,int);
                char dd[10];
                itoa(d,dd,10);
                sublen = printStr(dd);
            }else if(*format == 'c')
            {
                char c = va_arg(vlist,char);
                putchar(c);
                sublen = 1;
            }else if(*format == 's')
            {
                char *str = va_arg(vlist,char *);
                sublen = printStr(str);

            }else if(*format == 'f')
            {
                double d = va_arg(vlist,double);
                char dd[20];
                gcvt(d,10,dd);
                sublen = printStr(dd);
            }
            format++;
            printf("
"); 
        }
        
        len += sublen;
    }
    va_end(vlist);
    return len;
}

int main()
{
    int num = MyPrintf("%d %c %s %f",4,'A',"1213",3.14);
    printf("输出字符的长度(回车符除外):%d
",num);
    return 0;
}
原文地址:https://www.cnblogs.com/newpanderking/p/3830788.html