设为首页 加入收藏

TOP

[c语言] 模拟实现printf,要求功能: my_printf("dc\ts\ndc\ndc\ts!", ...)
2015-11-19 23:07:15 来源: 作者: 【 】 浏览:10
Tags:语言 模拟 实现 printf 要求 功能 my_printf " dctsndcndcts ...
模拟实现printf功能输出如下形式,'d'输出整形,'c'输出字符型,'s'输出字符串,其他输出自身形式
?my_printf("dc\ts\ndc\ndc\ts!",1, 'b',"zhangweina",2, 'i', 3,'t', "welcome to you");
?
?
可变参数列表的一些小知识:
//宏 stdard.h
//va_list ?声明一个类型
//va_start 第一个参数为va_list变量的名字,第二个参数为省略号前最后一个有名字的参数。
// ? ? ? ? 用来初始化变量,即将其设置为指向可变参数部分的第一个参数。
//va_arg ? 第一个参数为va_list变量的名字,第二个参数为可变参数的类型。
// ? ? ? ? 调用一次,就指向下一个可变参数。返回值的类型即为第二个参数的类型。
//va_end ?访问完最后一个参数,调用va_end.
?
?
#include
#include
#include
#include

//自定义输出函数,按照str的字符顺序输出  字符,字符串,数字
void my_printf(const char *str, int len, ...)
{
    va_list arg; 
    va_start(arg, len); 

    for (int i = 0; i < len; i++,*str++)
    {
        char a = 0;
        char *a1 = NULL;
        int a2 = 0;
        //多分支语句,分情况讨论
        switch (*str)
        {
        case 'c':   //参数是字符型,char类型
            a = va_arg(arg, char);
            putchar(a);
            break;
        case 's':   //参数是字符串时,char*类型
            a1 = va_arg(arg,char*);
            while (*a1)
            {
                putchar(*a1);
                *a1++;
            }
            break;
        case 'd':   //参数是整形,int类型
             a2 = va_arg(arg, int);
            putchar(a2+'0');
            break;
        default:   //参数是其他,按照本来形式输出
            putchar(*str);
            break;
        }
    }
    va_end(arg);
}

int main()
{
    char *str = "dc\ts\ndc\ndc\ts!";
    int len = strlen(str);
    my_printf(str, len,1, 'b',"zhangweina",2, 'i', 3,'t', "welcome to you");
    system("pause");
    return 0;
}

?

?
?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c语言实现小游戏_三子棋 下一篇C练习小代码-20151108

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: