標(biāo)題:
自己寫一個(gè)C語(yǔ)言中的printf函數(shù)
[打印本頁(yè)]
作者:
jialinx
時(shí)間:
2015-9-14 18:49
標(biāo)題:
自己寫一個(gè)C語(yǔ)言中的printf函數(shù)
#include <stdio.h>
#include <stdlib.h>
#include "stdarg.h"
void PrintInt(unsigned int Num);//輸出正整數(shù)
void PrintString(char *str);//輸出字符串
void PrintInt_2(int Num);//輸出整數(shù)
void PrintBit(int Bit);//輸出二進(jìn)制數(shù)
void PrintFloat(float Num);//輸出浮點(diǎn)數(shù)
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);
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1