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

模拟实现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;
}


本文出自 “娜些维度的雪” 博客,请务必保留此出处http://1536262434.blog.51cto.com/10731069/1711528

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值