根据上一篇中的  《可变参数列表(非格式化控制)》,今天继续学习:

自己写一个函数实现printf功能。

1.自己实现的printf函数

#include <stdio.h>
#include <stdarg.h>void my_printf(const char *str,...)
{va_list var;char c = 0;unsigned int ui = 0;int i = 0;float f = 0;double d = 0;char *s = NULL;va_start(var,str);while('\0' != *str){if('%' != *str){printf("%c",*str);str++;continue;}else{switch (*(++str)){case 'c':c = (char)va_arg(var,int);printf("%c",c);break;case 'u':ui = (unsigned int)va_arg(var,int);printf("%u",ui);break;case 'd':i = va_arg(var,int);printf("%i",i);break;case 'f':f = (float)va_arg(var,double);printf("%f",f);break;case 'l':if('f' == *(str + 1)){d = va_arg(var,double);printf("%lf",d);str++;}break;case 's':s = (char*)va_arg(var,char*);printf("%s",s);break;default:printf("%c",*str);break;}str++;}}va_end(var);
}
int main()
{my_printf("");my_printf("11 %%\n");my_printf("22 hello\n");my_printf("33 c=%c,ui=%u,i=%d,f=%f,d=%lf\n",'A',123,-234,3.14,6.66);return 0;
}

简单的测试了下,满足要求,可能还存在问题,以后慢慢优化

自己实现的printf函数相关推荐

  1. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  2. c语言自定义char*函数返回值是乱码_[每日C语言」printf()函数的修饰符和返回值...

    在上一个小demo<printf()函数(1)>中主要说了一下printf()函数的转换说明符,这些转移说明符是可以被修饰的.我们可以在%d和定义的转义字符之间通过插入修饰符对基本的转换说 ...

  3. c程序设计语言中printf,编程序 用getchar函数读入两个字符c1和c2,然后分别用putchar和printf函数输出这两个字符。请问...

    编程序,用getchar函数读入两个字符给c1和c2,然后分别用putchar和printf函数输出这两个字符.请问: 1. 变量C1,C2应定义为字符型或整型?或二者皆可? 答:在这个题目里,变量C ...

  4. php 格式化评论量函数,深入剖析PHP中printf()函数格式化使用

    printf()函数优点在于可以格式化输出! printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ② ...

  5. STM32中关于串口通信的printf()函数重定向问题

    在STM32串口通信程序中使用printf()函数发送数据非常方便,但是需要先进行简单的配置,下面介绍两种配置方法. 方法一.对工程属性进行配置 第1步:在main.c中包含"stdio.h ...

  6. scanf函数和printf函数

    C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符:  d格式符:用来输出一个有符号的十进制整数  c格式 ...

  7. C中printf函数的实现原理

    一.printf函数的实现原理 在C/C++中,对函数参数的扫描是从后向前的.C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机 ...

  8. 用宏定义代替printf函数

    问题提出 有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会.我们总不能对每一条print ...

  9. C语言程序设计基础及应用实例---第一节 printf函数的使用

    (1)printf函数打印字符串 #include <stdio.h>int main(void) {printf("Helloworld!\r\n");return ...

  10. PIC中实现printf函数出现:Warning [2066] type qualifier mismatch in assignment

    为什么会出现"Warning [2066] type qualifier mismatch in assignment"(警告[2066] 指定的类型限定符不匹配)? 解答:    ...

最新文章

  1. 5G前夜 运营商如何实现网络创新?
  2. php中的elseif和else if
  3. MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别
  4. PHP修改表格(增删改)
  5. iphone升级ios7之后出现蓝框框一直跳的问题
  6. linux sigar 进程监控,Linux 下使用Sigar 获取CPU 使用率
  7. Python语言程序设计 嵩天
  8. 读《Redis入门指南》2
  9. 期货公司开户实力经纪业务的规模
  10. INSTALL_PARSE_FAILED_NO_CERTIFICATES 解决办法
  11. 嵌入式 - 瑞萨电子的并购交易
  12. 计算机考研搜集的资料(408)
  13. php版工行聚合支付和e支付
  14. P4043 [AHOI2014/JSOI2014] 上下界最小费用流
  15. 新的掌舵手已就位,汽车之家这艘船将驶向何方?
  16. 从富文本(html字符串)中获取图片,js获取富文本中的第一张图片(正则表达式)
  17. 智慧天下:专业版和绿色版有什么区别?
  18. EtherCAT简介
  19. Python生成英文大小写和数字的随机数
  20. SAP中采购交货时间取值物料主数据或采购协议配置分析测试

热门文章

  1. 小爱音响服务器升级维护,小米互联网音箱升级“小爱同学”变砖?教你一招满血复活!...
  2. java 发邮件授权码_javamail - androidmail 发送邮件 各种邮件授权方式
  3. HTTP服务器远程控制,求关注:远程控制你的打印机,附详细步骤
  4. 菜鸟教程之工具使用——国际化资源文件开发凶器MultiProperties
  5. 1.7Eclipse开发工具介绍(2020-12-6)
  6. Linux驱动emmc的8bits/4bits/1bits模式自动匹配优化
  7. 链式解决冲突散列表计算asl方法
  8. Sigrity Power SI提取S参数
  9. 网络广告VS电子邮件
  10. 衡量风控策略区分度的三步法