自己实现可变参数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) 收藏 举报
浙公网安备 33010602011771号