欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2694|回復: 0
打印 上一主題 下一主題
收起左側

跨平臺移植printf

[復制鏈接]
跳轉到指定樓層
樓主
ID:75926 發表于 2015-4-10 17:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在MUC中只要給出 putc() 向顯示器輸出一個字符 的函數的實現 就可以吧 printf() 的功能移植上去了
  1. #include "stdio.h"
  2. #include "stdarg.h"

  3. void put_str(char *str)
  4. {
  5.     while(*str)
  6.     {
  7.         putc(*str,stdout);
  8.         str++;
  9.     }
  10. }

  11. void put_int(int num)
  12. {
  13.     char s[15];
  14.     int temp=num;
  15.     char i=0,cnt;
  16.     if(num==0)
  17.     {
  18.         putc('0',stdout);
  19.         return;
  20.     }
  21.     while(temp)
  22.     {
  23.         i++;
  24.         temp/=10;
  25.     }
  26.     if(i>14)
  27.         return;
  28.     s[i]=0;
  29.     for(cnt=i-1;cnt>=0;cnt--)
  30.     {
  31.         s[cnt]=num%10+'0';
  32.         num/=10;
  33.     }
  34.     put_str(s);
  35. }

  36. void put_float(double num)
  37. {
  38.     double temp=num;
  39. char j=0;
  40.     long temp1,temp3;
  41. double temp2;
  42.     int i=0,cnt;
  43.     char s[25];
  44.     if(num==0)
  45.     {
  46.         put_str("0.000000");
  47.         return;
  48.     }
  49.     temp1=(long)temp;
  50. temp2=temp-temp1;
  51. temp2*=1000000;
  52. if((long)temp2==0)
  53. {
  54. put_int(temp1);
  55. return;
  56. }
  57.     while(temp1)
  58.     {
  59.         i++;
  60.         temp1/=10;
  61.     }
  62. temp1=(long)temp;
  63. temp3=(long)temp2;
  64. while(temp3)
  65.     {
  66.         i++;
  67.         temp3/=10;
  68.     }
  69. temp3=(long)temp2;

  70.     s[i+1]=0;
  71.     for(cnt=i;cnt>=0;cnt--)
  72.     {
  73. if(temp3==0&&j==0)
  74. {
  75. s[cnt]='.';
  76. j++;
  77. continue;
  78. }
  79. if(temp3!=0)
  80. {
  81. s[cnt]=temp3%10+'0';
  82. temp3/=10;
  83. }
  84. else if(j==1)
  85. {
  86. s[cnt]=temp1%10+'0';
  87. temp1/=10;
  88. }
  89.     }
  90.     put_str(s);
  91. }

  92. void my_printf(char *fm,...)
  93. {
  94. va_list ap;
  95. char *p, *sval;
  96. int ival;
  97. double dval;
  98. va_start(ap, fm);
  99. for(p=fm;*p;p++)
  100. {
  101. if(*p!='%')
  102. {
  103. putc(*p,stdout);
  104. continue;
  105. }
  106. switch(*++p)
  107. {
  108. case 'd':
  109.              ival = va_arg(ap, int);
  110.              put_int(ival);
  111.              break;
  112.         case 'f':
  113.              dval = va_arg(ap, double);
  114.              put_float(dval);
  115.              break;
  116.         case 's':
  117.           sval = va_arg(ap, char *);
  118.                put_str(sval);
  119.              break;
  120.         default:
  121.              putc(*p,stdout);
  122.              break;
  123. }
  124. }
  125. }

  126. int main()
  127. {
  128. my_printf("%f",123.0);
  129. printf("\n");
  130. return 0;
  131. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表