您的位置:首页 > 编程语言 > C语言/C++

【c语言】   模拟实现printf,要求功能: my_printf("dc\ts\ndc\ndc\ts!", ...)

2015-11-10 17:37 393 查看
模拟实现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<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>

//自定义输出函数,按照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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  可变参数列表