《C和指针》第7章第5道编程题:

实现一个简化的printf函数,它能够处理%d、%f、%s 和 %c 格式码,根据ANSI标准的原则,其他格式码的行为是未定义的。你可以假定已经存在函数 printf_integer 和 printf_float,用于打印这些类型的值。对于另外两个类型的值,使用 putchar 来打印。

答案参考百度知道

 /*
** 实现一个简易的printf函数
** 它能处理%d, %f, %s,%c格式码
*/ #include <stdarg.h> //处理可变参数列表
#include <stdio.h> int putchar( int c );
int printf_int( int i ){;} // 假定printf_int函数用于打印int类型的值
int printf_float( float f ){;} // 假定printf_float函数用于打印float类型的值 int my_printf( char *fmt, ... ); int
main()
{
my_printf( "integer test: %d\n", ); // 由于printf_int函数是假定的,实际不能打印数值
my_printf( "float test: %f\n", 0.5 ); // 由于printf_float函数是假定的,实际不能打印数值
my_printf( "string test: %s\n", "abcdefg" );
my_printf( "char teat: %c\n", 'A' );
my_printf( "%d %f %s %c\n", , 4.124, "ABC", 'h' );
return ;
} /*
** 函数,实现简易的printf函数
*/
int
my_printf( char *fmt, ... )
{
va_list prtf_list;
char *fp; // 指向fmt字符串
char *sval; // 要输出的字符串
int ival; // 要输出的整数
float fval; // 要输出的浮点数
char cval; va_start( prtf_list, fmt ); for( fp = fmt; *fp != '\0'; ++ fp )
{
/*
** 如果没遇到%,则直接输出字符
** 并处理下一个字符
*/
if( *fp != '%' )
{
putchar( *fp );
continue;
} /*
** 如果遇到%,则看下一个字符
** 根据格式输出
*/
switch( *++fp )
{
case 'd':
ival = va_arg( prtf_list, int ); // 从参数列表中获取一个int类型的值
printf_int( ival );
break;
case 'f':
fval = va_arg( prtf_list, double ); // 从参数列表中获取一个float类型的值
printf_float( fval );
break;
case 's':
// 从参数列表中获取一串字符,并逐个输出
for( sval = va_arg( prtf_list, char * ); *sval != '\0'; ++ sval )
putchar( *sval );
break;
case 'c':
cval = va_arg( prtf_list, int ); //从参数列表中获取一个字符并输出
putchar( cval );
break;
default:
break;
}
} va_end( prtf_list ); return ;
}

一个简化的printf函数的更多相关文章

  1. printf函数

    printf函数的格式及含义 d                    以十进制带符号的形式输出整数(对正数不输出符号) o                    以八进制无符号的形式输出整数(不输出 ...

  2. 【C语言】浅谈可变参数与printf函数

    一.何谓可变参数 int printf( const char* format, ...); 这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用& ...

  3. printf 函数的实现原理

    /* * ===================================================================================== * * Filen ...

  4. scanf,printf函数细节

    今天笔试的时候遇到一个考察C语言scanf函数的题目 int x; float y; scanf("%3d%f",&x,&y); // input 123456 6 ...

  5. printf函数的返回值

    先看下面一段程序: 文末会给大家推荐几本好书,希望能够需要的朋友一点帮助! #include <stdio.h> int main() { int i = 123; printf(&quo ...

  6. 你真的很了解printf函数吗?

    对C语言中经常使用的printf这个库函数,你是否真的吃透了呢? 系统化的学习C语言程序设计,是不是看过一两本C语言方面的经典著作就足够了呢?答案是显而易见的:不够.通过这种典型的入门级的学习方式,是 ...

  7. 研究不定数量参数的函数并实现一个printf函数

    一.前提知识 1.如何传递参数(主函数) a.函数的参数是通过栈传递,而且是从右到左依次入栈 b.即使是char型变量,在传递参数时,也是占用两个字节,因为push操作是两个字节为单位的. c.sho ...

  8. 不定参数函数原理以及实现一个属于自己的printf函数

    一.不定参数函数原理 二.实现一个属于自己的printf函数 参考博文:王爽汇编语言综合研究-函数如何接收不定数量的参数

  9. 如果简化stm32中printf函数的使用——首先重定向

    STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印.(HAL库例程)https://blog.csdn.net/wu10188/article/details/9 ...

随机推荐

  1. 解决MYSQL弃用模块错误Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future

    今天使用了mysql 5.5版本,就出现了错误.错误提示如下: Deprecated: mysql_connect(): The mysql extension is deprecated and w ...

  2. 使用Calendar增加日期

    /** * @Description: 当前日期加上n个月返回long date */ public static long getLongDateAddMonth(int n){ Calendar ...

  3. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  4. cf471A MUH and Sticks

    A. MUH and Sticks time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  5. 微软雅黑 firefox Css 设置 font-family: "microsoft yahei","\5FAE\8F6F\96C5\9ED1","宋体";

    font-family: "microsoft yahei","\5FAE\8F6F\96C5\9ED1","宋体";    // 这里用引 ...

  6. 【转】morgan stanley 电面面经新鲜出炉

    楼楼早上上午大概11点接到的电话,一个声音炒鸡好听的GG,说他是来自morgan stanley的,想和我约一下店面时间.我一听,真是戳不及防,掐指一算,online的IKE测试已经过去20几天了吧, ...

  7. 关于随机数字K线极值的统计结果

    如果有组随机数字,如数字彩票.我们对号码进行平均二分后,统计期出现的结果分布,对结果分布进行K线累加,得到一条折线. 这条折线的顶点和底点的统计上服从以下规则: 令总期数为N,统计区间为M,则在N期内 ...

  8. 什么是FastCGI?

    什么是FastCGI? PHP的FastCGI使你的所有php应用软件通过mod_fastci运行,而不是mod_phpsusexec.FastCGI应用速度很快 是因为他们持久稳定.不必对每一个请求 ...

  9. IOS添加多个按钮在导航栏

    UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 75.0f, 30.0f)]; UIButton * ...

  10. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...