可变参数

关于可变参数的代码实现:

/* 可变参数需要包含一个头文件 :stdarg.h */
#include<stdarg.h>
#include<stdio.h>
#include<stdlib.h>

/* ... 代表可变参数 */
void myprintf(char *ptstr,...)
{
	/*va_list定义: typedef char *  va_list;*/
	va_list ap;		//起始点
	va_start(ap, ptstr);	//从ap开始读取ptstr
	
	char flag;
	while (*ptstr) // \0 的值是 0 所以可以这样写 
	{
		flag = *ptstr;	//取出字符
		if (*ptstr != '%')
		{
			putchar(flag);	//打印字符
		}
		else
		{
			/* 如果遇到 % 字符则继续向前读取一个字符 */
			ptstr++;  //可能遇到 %d %c %s %% 分几种情况区别对代
			flag = *ptstr; 
			switch (flag)
			{
			case 'd':
			{
				int data = va_arg(ap, int);	//读取下一个参数按照int
				printf("%d", data);
				break;
			}
			case 'c':
			{
				char ch = va_arg(ap, char);	//读取下一个参数按照char 
				printf("%c", ch);
				break;
			}
			case 'f':
			{
				float  f = va_arg(ap, float);	//读取下一个参数按照 float 
				printf("%f", f);
				break;
			}
					
			case 's':
			{
				char *str = va_arg(ap, char *);	//读取下一个参数按照char *
				printf("%s", str);
				break;
			}
				case '%':
					break;

			}

		}
		ptstr++;		
	}
	va_end(ap);	//结束读取
}

void main()
{
	printf("printf: 123abc\n");
	myprintf("myprintf: 123abc\n");
	printf("printf: 123abc%d\n", 10);
	myprintf("myprintf: 123abc%d\n", 10);
	printf("123abc%d%s\n", 10,"sadfsdf");


	system("pause");
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值