C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)
来源:互联网 发布:网络兼职客服招聘 编辑:程序博客网 时间:2024/05/09 14:14
1、问题
*简化printf函数,能够处理%d, %f, %c, %s格式码,假设已经存在
*print_integer和print_float函数,另外2个类型用put char来打印
*print_integer和print_float函数,另外2个类型用put char来打印
思路:
void va_start(va_list ap, last);// 取第一个可变参数的指针给ap,// last是函数声明中的最后一个固定参数(比如printf函数原型中的*fromat);type va_arg(va_list ap, type);// 返回当前ap指向的可变参数的值,然后ap指向下一个可变参数;// type表示当前可变参数的类型(支持的类型位int和double);void va_end(va_list ap);// 将ap置为NULL
2、代码实现
#include <stdio.h>#include <stdarg.h>/** * 简化printf函数,能够处理%d, %f, %c, %s格式码,假设已经存在 * print_integer和print_float函数,另外2个类型用putchar来打印 */void print_integer(int value){ printf("%d", value);}void print_float(float value){ printf("%.1f", value);}void my_printf(char *string, ...){ va_list arg; //初始化 va_start(arg, string); char *str1 = string; char *str2; while (*str1 != '\0') { //输出普通字符 if (*str1 != '%') { putchar(*str1++); continue; } switch (*(str1 + 1)) { case 'd': print_integer(va_arg(arg, int)); str1 += 2; break; case 'f': print_float(va_arg(arg, double)); str1 += 2; break; case 'c': putchar(va_arg(arg, int)); str1 += 2; break; case 's': str2 = va_arg(arg, char *); while (*str2 != '\0') putchar(*str2++); str1 += 2; break; default: str1 += 2; break; } }}int main(){ int a = 5; float b = 4.3; char c = 'c'; char *s = "chenyu"; my_printf("my_printf a is %d and b is %f and c is %c and d is %s", a, b, c, s); return 0;}
3、运行结果
1111deMacBook-Pro:dabian a1111$ vim my_printf.c1111deMacBook-Pro:dabian a1111$ gcc -g my_printf.c -o my_printf1111deMacBook-Pro:dabian a1111$ ./my_printfmy_printf a is 5 and b is 4.3 and c is c and d is chenyu
阅读全文
0 0
- C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)
- C和指针之字符串简单实现strchr、strcmp函数
- 扩展的system函数,支持变参(%d, %f, %c, %s)
- C语言实现的简单的print函数,只支持%c和%d。
- C和指针之实现strlen函数
- C语言之scanf和printf函数
- C语言之函数printf()的用法
- C语言之printf函数
- thinkphp 内部函数 D、F、S、C、L、A 他们的用途和所在位置
- C和指针之字符串之实现strcpy函数
- c实现的printf函数
- C语言之格式化输入(printf函数和scanf函数)
- C-[之函数指针]
- C语言之函数指针和函数的首地址
- printf函数的 %s 与 %c
- C和指针之字符串简单实现 strcpy、strcat、strstr函数
- C和指针之字符串实现strrstr函数
- c语言学习笔记之函数指针和指针函数
- 并查集 hdu1213 How Many Table 图论500题
- 四周三次课(11月8日) 9.1 异常的常用形式和处理 9.2 Excepthion异常类 9.3 raise关键字的使用
- 微信红包拆红包效果
- Spring MVC自定义类型转换器
- 并查集 hdu 1272 小希的迷宫 图论500题
- C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)
- 几段代码让你彻底搞懂编码出现乱码问题(File类的几个读写文本问题)
- keepalived+nginx实现主备高可用
- 如何快速转发csdn博客?
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Eclipse Theme Color的安装是使用
- Linux之redhat中lvm分区教程
- Laravel在Windows下搭建开发环境Homestead出现的一个大坑Timed out while waiting
- 查询硬盘容量