码迷,mamicode.com
首页 > 其他好文 > 详细

一个简化的printf函数

时间:2014-11-24 22:18:03      阅读:314      评论:0      收藏:0      [点我收藏+]

标签: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 }

 

一个简化的printf函数

标签:style   blog   io   ar   color   使用   sp   for   on   

原文地址:http://www.cnblogs.com/zouhongmey/p/4119679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!