自己实现可变参数printf函数 ------ myprintf

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<stdarg.h>
 4 
 5 void myprintf(char *ptstr,...) // 可变参数
 6 {
 7     va_list ap;//作为起始点
 8     va_start(ap,ptstr);// 从起始点开始读取ptstr
 9 
10     char flag;// 保存读取的字符
11     while (*ptstr)// 不等于 '\0'  也就是 0 的时候继续
12     {
13         if (*ptstr!='%')
14         {
15             flag = *ptstr;
16             putchar(flag);// 输出字符
17             ptstr++;// 指针往前不断移动 遇到 '\0' 就结束
18         }
19 
20         else
21         {
22             ptstr++; // 指针往前 判断 %d %c %d %%....
23             flag = *ptstr;
24             switch (flag)
25             {
26                 case 'd':
27                 {
28                     int data = va_arg(ap, int);// 按照int类型读取下一个参数
29                     printf("%d",data);// 整数转化字符串,挨个显示字符
30                     break;
31                 }
32 
33                 case 's':
34                 {
35                     char *str = va_arg(ap, char*);// 按照char *类型读取下一个参数
36                     printf("%s", str);
37                     break;
38                 }
39                 case 'c':
40                 {
41                     char ch = va_arg(ap, char);// 按照char类型读取下一个参数
42                     printf("%c", ch);
43                     break;
44                 }
45 
46                 case 'f':
47                 {
48                     double db = va_arg(ap, double);// 按照double类型读取下一个参数
49                     printf("%f", db);
50                     break;
51                 }
52                 case '%':
53                 {
54                     putchar('%');
55                     break;
56                 }
57 
58                 default:
59                     break;
60                 }
61             ptstr++;
62         }
63     
64     }
65 
66     va_end(ap);// 要记得 结束读取
67 
68 }
69 
70 void main()
71 {
72     myprintf("Hello World 123\n");
73     myprintf("%d\n",100);
74     myprintf("%s\n","C study");
75     myprintf("%c\n", 'c');
76     myprintf("%f\n", 123.45);
77     myprintf("%%\n");
78 
79     myprintf("123study  %%  %d %c %s %f \n",100,'c',"C study",123.45);
80 
81     system("pause");
82 }
83 
84 /*********************************运行结果*****************************/
85 
86 /*
87     Hello World 123
88     100
89     C study
90     c
91     123.450000
92     %
93     123study  %  100 c C study 123.450000
94     请按任意键继续. . .
95 */

posted on 2015-05-14 10:57  Dragon-wuxl  阅读(785)  评论(0)    收藏  举报

导航