模拟实现printf函数,用可变参数列表

题目:

模拟实现printf函数,可完成下面的功能能完成下面函数的调用。
print(“s ccc d.\n”,”hello”,’b’,’i’,’t’,100);
函数原型:
print(char *format, …)

分析:

要实现printf函数,我们首先应该获取printf函数中由双引号中的字符串,若遇到不是%的字符,我们应该直接将其输出,若遇到%,我们应该判断它后面是什么字符,如果是%c那我们需要将读到的字符输出来,若为%s我们将读到的字符串通过指针的方式依次输出
如果是%d,我们将它转换为字符输出。

代码如下
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
void guiitoa(int num)  //递归将整型123,输出为字符型123
{
    if(num/10==0)
        putchar(num%10+'0');
    else
    {
        guiitoa(num/10);
        putchar(num%10+'0');
    }
}
void print(const char *format,...)
{
    int i = 0;
    va_list arg;  //定义char* 变量arg
    va_start(arg,format); //为arg进行初始化
    for(i = 0;format[i]!='\0';i++)
    {
        if(format[i]!='%')
        {
            putchar(format[i]);
        }
        else
        {
            i++;
            switch(format[i])
            {
            case 'c':
                    putchar(va_arg(arg,int));//取下一个参数的字符,并打印
                    break;
            case 'd':
                {
                    int r = va_arg(arg,int);
                    guiitoa(r);
                }
                break;
            case 's':
                {
                    char *r = va_arg(arg,char*);//取下一个参数的地址,因为这个是字符串
                    int i =0;
                    for(i = 0;r[i]!='\0';i++)  //逐一输出
                        putchar(r[i]);
                }
                break;
            /*case '%':
                putchar("%");
                break;*/
            }
        }
    }
}
int main()
{

    print("%s  %c %c %c   %d","hello",'b','i','t',100);
    system("pause");
    return 0;
}

运行结果
这里写图片描述

猜你喜欢

转载自blog.csdn.net/sister_wang0712/article/details/80286885