您的位置:首页 > 其它

简单实现printf函数

2015-11-27 12:40 288 查看
使用可变参数列表简单实现printf函数

代码如下:

my_print.h

/*

******************

头文件

******************

*/
<span style="font-size:18px;">
#ifndef __PRINT_H__
#define __PRINT_H__
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
//#include<string.h>
#include<math.h>
#define MAX 6       //处理浮点数的小数部分的位数
/*
处理字符的函数
*/
void printchar(const char ch);
/*
处理整形的函数
*/
void printint(const int in);
/*
处理字符串的函数
*/
void printstr(const char *str);
/*
处理浮点数
*/
void printfloat(const float fl);
/*
自己的printf函数
使用可变参数列表实现
*/
void my_printf(const char *format,...);
#endif  //__PRINT_H__</span>


function.c

/*

*****************

函数功能实现的源文件

*****************

*/
<span style="font-size:18px;">
#include "my_print.h"
/*
如果接收的是字符类型 则使用putchar()输出到屏幕
*/
void printchar(const char ch)
{
putchar(ch);
}
/*
如果是整形数则通过递归将其每一位转变为字符输出
*/
void printint(const int in)
{
if (in < 10)
{
putchar(in % 10 + '0');
return;
}
printint(in / 10);
putchar(in % 10 + '0');
}
/*
如果是字符串则找字符串结束标志
*/
void printstr(const char *str)
{
while (*str)
putchar(*str++);
}
/*
处理浮点数
首先处理整数部分
****************
在处理小数部分
这里只处理到小数点后6位,其余位缺省掉
*/
void printfloat(const float fl)
{
int i = 0;
printint((int)(fl)); //处理整数部分
putchar('.');
//处理小数部分
for (i = 1; i <= MAX; i++)
{
//通过强制类型转换的巧妙应用按顺序打印想输出的小数位数
putchar(((int)((fl - (int)fl)*pow((int)10, i))) % 10 + '0');
}
}
/*
自己的printf函数具体实现
*/
void my_printf(const char *format,...)
{
va_list arg;
char ch;
int in;
char *str;
float fl;
va_start(arg, format);  //4
while (*format)
{
if (*format != '%')
{
putchar(*format);
format++;
}
else
{
format++;
switch (*format)
{
case 'c':
ch = va_arg(arg, char);
printchar(ch);
format++;
break;
case 'd':
in = va_arg(arg, int);
printint(in);
format++;
break;
case 's':

str = va_arg(arg, char*);
printstr(str);
format++;
break;
case 'f':
fl = va_arg(arg, double);
printfloat(fl);
format++;
break;
default:
format--;
putchar(*format);
format++;
break;
}
}
}
va_end(arg);
}
</span>


test.c

/*

*******

测试函数

*******

*/

<span style="font-size:18px;">
#include "my_print.h"
int main()
{
int in = 123;
char ch = 'm';
char str[] = "asdfg";
float fl = 1.23;
printf("%d %c %s %f\n", in, ch, str, fl);
my_printf("%d %c %s %f\n", in, ch, str, fl);
system("pause");
return 0;
}
</span>
结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: