自己用C语言写一个简易printf
2017-01-17 18:57
225 查看
#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);
}
#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);
}
相关文章推荐
- 自己写的,用c语言实现的一个数组存储的线性表
- 自己决定创一个有实际作用而又非一般的C语言讨论群,有兴趣的朋友可以看下
- 黑马程序员——自己写的一个网页版简易账本
- 自己动手制作一个简易的shell
- C语言:一个涉及指针函数返回值与printf乱码、内存堆栈的经典案例
- http://zhoulifa.bokee.com/用C语言自己编写一个ls程序
- 自己尝试写的一个javascript简易版本的《别踩白块儿》小游戏
- 【C语言】【网络编程】菜鸟学习日志(三) 一个简易B/S系统——Http Server和精简的浏览器
- 自己写的一个简易单文件上传类
- 都学了这么久的C语言了,printf函数里面的一个用法还没记住
- 实现一个简易的IoC框架(上)(此篇与Spring.NET无关,为自己手写IoC框架)
- 一个简易的c语言病毒源码
- 分享一个自己做的简易敏捷开发管理工具——AgileLite
- 贴上自己的一个python写的去c语言注释的小脚本,以备后用
- 学C语言自己写的一个程序
- 一个难懂的C语言里的printf用法
- 分享一个自己做的简易敏捷开发管理工具——AgileLite
- C语言中如何printf一个unsigned long long的数据?
- 最差劲最凌乱的一个小程序,给自己一个教训-Linux下C语言
- 用c语言实现一个自己的atof()函数