- #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);
- }
自己用C语言写一个简易printf
最新推荐文章于 2024-02-25 16:41:22 发布