自己實現的printf函式
阿新 • • 發佈:2018-12-09
根據上一篇中的 《可變引數列表(非格式化控制)》,今天繼續學習:
自己寫一個函式實現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; }
簡單的測試了下,滿足要求,可能還存在問題,以後慢慢優化