在MUC中只要给出 putc() 向显示器输出一个字符 的函数的实现 就可以吧 printf() 的功能移植上去了
- #include "stdio.h"
- #include "stdarg.h"
- void put_str(char *str)
- {
- while(*str)
- {
- putc(*str,stdout);
- str++;
- }
- }
- void put_int(int num)
- {
- char s[15];
- int temp=num;
- char i=0,cnt;
- if(num==0)
- {
- putc('0',stdout);
- return;
- }
- while(temp)
- {
- i++;
- temp/=10;
- }
- if(i>14)
- return;
- s[i]=0;
- for(cnt=i-1;cnt>=0;cnt--)
- {
- s[cnt]=num%10+'0';
- num/=10;
- }
- put_str(s);
- }
- void put_float(double num)
- {
- double temp=num;
- char j=0;
- long temp1,temp3;
- double temp2;
- int i=0,cnt;
- char s[25];
- if(num==0)
- {
- put_str("0.000000");
- return;
- }
- temp1=(long)temp;
- temp2=temp-temp1;
- temp2*=1000000;
- if((long)temp2==0)
- {
- put_int(temp1);
- return;
- }
- while(temp1)
- {
- i++;
- temp1/=10;
- }
- temp1=(long)temp;
- temp3=(long)temp2;
- while(temp3)
- {
- i++;
- temp3/=10;
- }
- temp3=(long)temp2;
- s[i+1]=0;
- for(cnt=i;cnt>=0;cnt--)
- {
- if(temp3==0&&j==0)
- {
- s[cnt]='.';
- j++;
- continue;
- }
- if(temp3!=0)
- {
- s[cnt]=temp3%10+'0';
- temp3/=10;
- }
- else if(j==1)
- {
- s[cnt]=temp1%10+'0';
- temp1/=10;
- }
- }
- put_str(s);
- }
- void my_printf(char *fm,...)
- {
- va_list ap;
- char *p, *sval;
- int ival;
- double dval;
- va_start(ap, fm);
- for(p=fm;*p;p++)
- {
- if(*p!='%')
- {
- putc(*p,stdout);
- continue;
- }
- switch(*++p)
- {
- case 'd':
- ival = va_arg(ap, int);
- put_int(ival);
- break;
- case 'f':
- dval = va_arg(ap, double);
- put_float(dval);
- break;
- case 's':
- sval = va_arg(ap, char *);
- put_str(sval);
- break;
- default:
- putc(*p,stdout);
- break;
- }
- }
- }
- int main()
- {
- my_printf("%f",123.0);
- printf("\n");
- return 0;
- }
复制代码
|