43.可变参数实现printf
1 #include <stdio.h> 2 #include <stdio.h> 3 #include <Windows.h> 4 #include <stdarg.h> 5 6 void myprintf(char *ptstr, ...)//可变参数 7 { 8 va_list ap;//起始点 9 va_start(ap, ptstr);//从ptstr开始向后读取数据存放在ap中 10 char flag;//依次读取一个字符 11 while (*ptstr != '\0') 12 { 13 flag = *ptstr; 14 if (*ptstr != '%') 15 { 16 putchar(flag);//打印字符 17 ptstr++; 18 } 19 else 20 { 21 ptstr++;//往前 %d %c %s %% 22 flag = *ptstr;//取出字符 23 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* data = va_arg(ap, char*);//读取下一个参数安装int 36 printf("%s", data);//整数转化字符串,挨个显示字符 37 break; 38 } 39 40 case 'c': 41 { 42 char data = va_arg(ap, char);//读取下一个参数安装int 43 putchar(data); 44 break; 45 } 46 } 47 ptstr++; 48 } 49 } 50 va_end(ap);//结束读取 51 } 52 53 void main() 54 { 55 myprintf("abcd%s%c\n","成都市",'t'); 56 57 system("pause"); 58 }