标签:style blog io ar color 使用 sp for on
《C和指针》第7章第5道编程题:
实现一个简化的printf函数,它能够处理%d、%f、%s 和 %c 格式码,根据ANSI标准的原则,其他格式码的行为是未定义的。你可以假定已经存在函数 printf_integer 和 printf_float,用于打印这些类型的值。对于另外两个类型的值,使用 putchar 来打印。
答案参考百度知道
1 /* 2 ** 实现一个简易的printf函数 3 ** 它能处理%d, %f, %s,%c格式码 4 */ 5 6 #include <stdarg.h> //处理可变参数列表 7 #include <stdio.h> 8 9 int putchar( int c ); 10 int printf_int( int i ){;} // 假定printf_int函数用于打印int类型的值 11 int printf_float( float f ){;} // 假定printf_float函数用于打印float类型的值 12 13 int my_printf( char *fmt, ... ); 14 15 int 16 main() 17 { 18 my_printf( "integer test: %d\n", 134 ); // 由于printf_int函数是假定的,实际不能打印数值 19 my_printf( "float test: %f\n", 0.5 ); // 由于printf_float函数是假定的,实际不能打印数值 20 my_printf( "string test: %s\n", "abcdefg" ); 21 my_printf( "char teat: %c\n", ‘A‘ ); 22 my_printf( "%d %f %s %c\n", 100, 4.124, "ABC", ‘h‘ ); 23 return 0; 24 } 25 26 /* 27 ** 函数,实现简易的printf函数 28 */ 29 int 30 my_printf( char *fmt, ... ) 31 { 32 va_list prtf_list; 33 char *fp; // 指向fmt字符串 34 char *sval; // 要输出的字符串 35 int ival; // 要输出的整数 36 float fval; // 要输出的浮点数 37 char cval; 38 39 va_start( prtf_list, fmt ); 40 41 for( fp = fmt; *fp != ‘\0‘; ++ fp ) 42 { 43 /* 44 ** 如果没遇到%,则直接输出字符 45 ** 并处理下一个字符 46 */ 47 if( *fp != ‘%‘ ) 48 { 49 putchar( *fp ); 50 continue; 51 } 52 53 /* 54 ** 如果遇到%,则看下一个字符 55 ** 根据格式输出 56 */ 57 switch( *++fp ) 58 { 59 case ‘d‘: 60 ival = va_arg( prtf_list, int ); // 从参数列表中获取一个int类型的值 61 printf_int( ival ); 62 break; 63 case ‘f‘: 64 fval = va_arg( prtf_list, double ); // 从参数列表中获取一个float类型的值 65 printf_float( fval ); 66 break; 67 case ‘s‘: 68 // 从参数列表中获取一串字符,并逐个输出 69 for( sval = va_arg( prtf_list, char * ); *sval != ‘\0‘; ++ sval ) 70 putchar( *sval ); 71 break; 72 case ‘c‘: 73 cval = va_arg( prtf_list, int ); //从参数列表中获取一个字符并输出 74 putchar( cval ); 75 break; 76 default: 77 break; 78 } 79 } 80 81 va_end( prtf_list ); 82 83 return ; 84 }
标签:style blog io ar color 使用 sp for on
原文地址:http://www.cnblogs.com/zouhongmey/p/4119679.html