实现一个简化的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 != '\0')
    {
        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 != '\0')
    {
        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("\n"); 
        }
        
        len += sublen;
    }
    va_end(vlist);
    return len;
}

int main()
{
    int num = MyPrintf("%d %c %s %f",4,'A',"1213",3.14);
    printf("输出字符的长度(回车符除外):%d\n",num);
    return 0;
}

 

相关文章:

  • 2021-06-04
  • 2022-01-16
  • 2021-06-06
  • 2021-05-31
  • 2021-07-14
  • 2021-08-13
  • 2021-12-27
  • 2021-10-31
猜你喜欢
  • 2021-06-30
  • 2021-07-29
  • 2021-11-23
  • 2021-07-10
  • 2021-11-11
  • 2021-10-25
相关资源
相似解决方案