【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.
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; }
相关文章推荐
- Android如何防止apk程序被反编译
- Google《Android性能优化》学习笔记
- 数据库的一些概念
- mysql HA
- 5个php实例,细致说明传值与传引用的区别
- 手机端注意项
- ASP编程 set upload=new upload_5xSoft
- linux web服务器挂马 基础查找方法
- 详解MySQL中EXPLAIN解释命令
- BeanComparator实现ArrayList中的元素按多个属性复合排序
- oracle 调用C函数
- OCP 【11g新特性】sec_max_failed_login_attempts
- mongodb常用命令
- 系统性能信息模块篇psutil之获取系统性能信息
- IP地址处理模块IPy之IP地址、网段基本处理
- IP地址处理模块IPy之多网络计算
- Cisco 网络技术-----子网划分
- Tomcat启动脚本
- exchange 代理服务器设置
- CentOS下httpd与tomcat整合