-
#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);
- }