实现一个简化的printf函数,能够处理%d,%f,%s,%c等格式。
/************************************************************************* > File Name: permutation.c > Created Time: 2014年06月17日 星期二 23时22分34秒 ************************************************************************/ #include<stdio.h> #include<stdarg.h> #include<stdlib.h> //输出普通的字符串 int printStr(char const *str) { int len = 0; while(*str != ‘\0‘) { putchar(*str++); len++; } return len; } //说明,一个简化的printf函数,这个函数是能够%d,%c,%f,%s等格式。其他格式均是未定义的。 int MyPrintf(char const *format,...) { int len = 0; int sublen; va_list vlist; va_start(vlist,format);//获取第一个参数首地址 while(*format != ‘\0‘) { char data[50]; int sublen = 1; if(*format++ == ‘%‘) { if(*format == ‘d‘) { int d = va_arg(vlist,int); char dd[10]; itoa(d,dd,10); sublen = printStr(dd); }else if(*format == ‘c‘) { char c = va_arg(vlist,char); putchar(c); sublen = 1; }else if(*format == ‘s‘) { char *str = va_arg(vlist,char *); sublen = printStr(str); }else if(*format == ‘f‘) { double d = va_arg(vlist,double); char dd[20]; gcvt(d,10,dd); sublen = printStr(dd); } format++; printf("\n"); } len += sublen; } va_end(vlist); return len; } int main() { int num = MyPrintf("%d %c %s %f",4,‘A‘,"1213",3.14); printf("输出字符的长度(空格,回车符除外):%d\n",num); return 0; }
原文:http://www.cnblogs.com/newpanderking/p/3830788.html