首页 > 代码库 > 一个简化的printf函数
一个简化的printf函数
《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 int30 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 }
一个简化的printf函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。