用可变参数列表实现printf函数
要实现printf函数,我们首先应该获取printf函数中由双引号中的字符串,若遇到不是%的字符,我们应该直接将其输出,若遇到%,我们应该判断它后面是什么字符,这里先只考虑%c,%s的情况,如果是%c那么我们应该将读到的字符输出来,若为%s,应该将读到的字符串通过指针解引用的方式依次输出,如果是%d%f我们暂且将它当做普通字符输出。
实现的代码如下:
#include<stdlib.h> #include<stdarg.h> void my_printf(char *str,...) { va_list arg; va_start(arg, str); int ch = 0; char *pstr = NULL; while (*str) { if (*str == '%') { str++; switch (*str) { case 'c': { ch = va_arg(arg, char); putchar(ch); break; } case 's': { pstr = va_arg(arg, char*); while (*pstr) { putchar(*pstr); pstr++; } break; } default: putchar(*(str - 1)); putchar(*str); } str++; } else { putchar(*str); str++; } } va_end(arg); } int main() { my_printf("%s %c%c%c\n", "hello", 'b', 'i', 't'); my_printf("%d%f %c%c %f %s\n", 'a', 'b', "hello"); system("pause"); return 0; }