标题:
自己写一个C语言中的printf函数
[打印本页]
作者:
jialinx
时间:
2015-9-14 18:49
标题:
自己写一个C语言中的printf函数
#include <stdio.h>
#include <stdlib.h>
#include "stdarg.h"
void PrintInt(unsigned int Num);//输出正整数
void PrintString(char *str);//输出字符串
void PrintInt_2(int Num);//输出整数
void PrintBit(int Bit);//输出二进制数
void PrintFloat(float Num);//输出浮点数
void PrintFamt(const char *Format,...);//自己写的printf
int main()
{
int x=12;
float y=12.5;
char *p="123";
PrintFamt("x=%d\ty=%f\t*p=%s\n",x,y,p);
return 0;
}
void PrintBit(int Bit)
{
char bit;
for(bit=31;bit>=0;bit--)
{
if(Bit&(1<<31))
PrintChar('1');
else
PrintChar('0');
Bit<<=1;
PrintChar(' ');
}
}
void PrintChar(char ch)
{
fprintf(stdout,"%c",ch);
}
void PrintString(char *str)
{
while(*str)
PrintChar(*str++);
}
int Ex(char num)
{
int Temp=1;
while(num--)
{
Temp*=10;
}
return Temp;
}
void PrintInt(unsigned int Num)
{
unsigned char bit;
unsigned char number;
unsigned int Temp=Num;
unsigned char Length=0;
if(Num==0)
{
PrintChar('0');
return;
}
while(Temp)
{
Length++;
Temp/=10;
}
Temp=Num;
for(bit=0;bit<Length;bit++)
{
number=Temp/Ex(Length-bit-1);
PrintChar(number+'0');
Temp%=Ex(Length-bit-1);
}
}
void PrintInt_2(int Num)
{
if(Num&(1<<31))
{
PrintChar('-');
// Num=Num&(1<<31);
PrintInt(~(Num-1));
}
else
{
PrintInt(Num);
}
}
void PrintFloat(float Num)
{
int Temp=(int)Num;
int fTemp=Ex(6)*(Num-(int)Num);
PrintInt_2(Temp);
PrintChar('.');
if(fTemp&(1<<31))
PrintInt_2(~(fTemp-1));
else
{
PrintInt_2(fTemp);
}
}
void PrintFamt(const char *Format,...)
{
va_list ap;
va_start(ap,Format);
while(*Format)
{
switch(*Format)
{
case '%':{
switch(*(Format+1))
{
case 'd':PrintInt_2(va_arg(ap,int));Format++;break;
case 'f':PrintFloat(va_arg(ap,double));Format++;break;
case 's':PrintString(va_arg(ap,char*));Format++;break;
default:PrintChar('%');break;
}
};break;
case '\n':PrintChar('\n');break;
case '\t':PrintChar('\t');break;
default :PrintChar(*Format);
}
Format++;
}
va_end(ap);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1