不使用man 3 printf的函数,实现一个简单的printf函数
来源:互联网 发布:java建站 编辑:程序博客网 时间:2024/05/16 15:55
题目:不使用man printf中的函数,实现一个简易的输出函数myprintf。
函数声明:int myprintf(const char *format,...);
要求该函数可以识别(只需要识别)出format字符串中的%ld,%lf,%c,%s这四个转义字符,并转化成相应的参数。
函数声明:int myprintf(const char *format,...);
要求该函数可以识别(只需要识别)出format字符串中的%ld,%lf,%c,%s这四个转义字符,并转化成相应的参数。
说明:man printf中的函数即:printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf
实现代码:
#include <stdio.h>#include <stdarg.h>#include <stdlib.h>//输出一段普通的字符串int PrintStr(const char *format){const char *pos = format;int len = 0;while( *pos ){putchar( (int)*(pos++) );len++;}return len;}int MyPrintf(const char *format, ...){const char *pos = format;int len, sublen;len = 0;va_list vlist;va_start(vlist, format);while( *pos ){char ch = *pos;if( ch != '%' ){putchar( ch );sublen = 1;pos++;}//处理转义字符else{char nch = *(pos+1);//处理单字符转义if( 'c' == nch ){char tch = va_arg(vlist, char);putchar(tch);pos += 2;sublen = 1;}//处理字符串转义else if( 's' == nch ){char *tstr = va_arg(vlist, char*);sublen = PrintStr(tstr);pos += 2;}else if( 'l' == nch ){char nnch = *(pos + 2);//处理整形数据转义if( 'd' == nnch ){long tnum = va_arg(vlist, long);char tstr[21];_ltoa(tnum, tstr, 10);sublen = PrintStr(tstr);pos += 3;}//处理浮点形数据转义else if( 'f' == nnch ){double tnum = va_arg(vlist, double);char tstr[101];gcvt(tnum, 10, tstr);sublen = PrintStr(tstr);pos += 3;}else{putchar('l');putchar(nnch);pos += 3;}}//处理两个%的情况else if( '%' == nch ){putchar('%');pos += 2;sublen = 1;}else{pos++;sublen = 0;}}len += sublen;}va_end(vlist);return len;}int main(){int rr = MyPrintf("%ld, %lf, %c, %s\n", 456, 43.34, 'A', "hello, world");printf("%d\n", rr);return 0;}
如果大家发现我这个程序的BUG的话,欢迎提出,大家共同学习。
- 不使用man 3 printf的函数,实现一个简单的printf函数
- 简单的printf函数实现
- 实现简单的printf函数
- printf 函数的实现 *
- printf函数的实现
- printf函数的实现
- printf函数的使用
- printf函数的使用
- printf函数的简单模拟实现
- 自己实现的简单Printf函数
- 简单实现printf函数
- printf 函数的实现原理
- 实现自己的printf函数
- printf 函数的实现原理
- 实现自己的printf函数
- printf 函数的实现原理
- printf函数的实现原理
- 实现自己的printf函数
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成
- 搜索引擎-倒排索引基础知识
- 梦断代码--一个程序员的自白 (三)
- 演示一个矢量(Vector)的基本操作
- OpenGL ES 绘制多边形
- 不使用man 3 printf的函数,实现一个简单的printf函数
- 2012-05-17 11:30 自动补全代码 jquery+ajax+php+mysql
- Linux手工配置IP、网关及解决非正常关机导致ifup脚本丢失不能联网
- 有助于ios5开发的好东西
- 学习Spring3.X 企业应用开发实战笔记(一)
- TinyXML:一个优秀的C++ XML解析器
- Flex air 静态设置背景图与动态设置背景图
- linux下的文件编码,vim编码
- i2c