#define _crt_secure_no_warnings
#include
using namespace std;
#include
#include
void f1(size_t i, char ch)
;if (!i)return;
else
if (ch == 'p')
else
putchar(arr[i % base]);
}//%c %d %i %u %f %o %x/x %p %s %% (%a/a %e/e %g/g) %n
void print5(const char*format, ...)
case'-':
case'#'://只對o和x起作用 //對於o類,在輸出時加字首0;對於x類,在輸出時加字首0x。
case'0'://ch1表示'+','-';ch2表示'0','空'
//'0','+'混合情況(輸出+000***x);'0','-',('+')混合情況(輸出+***x)。
}//在處理m,n時,已經將ch1和ch2處理好了。
case'1':
case'2'://m表示域寬,即對應的輸出項在輸出裝置所佔位元組數
case'3': //指定佔位元組數m 與 實際佔位元組數,輸出項在輸出裝置所佔位元組數取二者最大值
case'4'://n表示精度,主要用於說明輸出的實型數的小數字數
case'5': //對於整型15:①%6.2d-> 15;②%6.4d-> 0015;③%6.8d->000015
case'6':
case'7':
case'8':
case'9':
case'.':
}if (ch == '.')
break;
}switch (*format)
case 'i':
;case 'd':
int tmp = i, count = 0;
while (tmp)++count, tmp /= 10;
n = n > count ? n : count;//保證n是兩者最大值
if (ch1 == '+'|| ch1 == ' ')
if (ch1 == '-')
f1(i, *format);
if (ch1 == '-')
while (m - n>0)--m, putchar(' ');//假如mbreak;
}case 'u':
if (ch1 == '-')
f1(u, *format);
if (ch1 == '-')
while (m - n>0)--m, putchar(' ');//假如mbreak;
}case 'f':
int tmp = (int)f,tmp2 = (int)f,count = 0;
while (tmp)++count, tmp /= 10;
count += n + 1;
if (ch1 == '+' || ch1 == ' ')
f1(tmp2, *format);
putchar('.');
if (n == 0)n = 6;
while (n--)f*=10,tmp2 *= 10;
tmp = f - tmp2;
f1(tmp, *format);
if (ch1 == ' ')
break;
}case 'o'://沒測試ch2 == '0'的情況
if (ch1 == '-')
f1(o, *format);
if (mif (ch1 == '-')
while (m - n>0)--m, putchar(' ');//假如mbreak;
}case'x':
;case 'x'://沒測試ch2 == '0'的情況
if (ch1 == '-')
f1(x, *format);
if (ch1 == '-')
break;
}case 'p'://沒測試ch2 == '0'的情況
if (ch1 == '-')
f1(p, *format);
if (ch1 == '-')
break;
}case 's'://沒測試ch2 == '0' 和ch3 == '#'的情況
for (size_t i = 0; i < n; ++i)
putchar(*(s + i));
if (ch1 == '-')
break;
}case '%':
case'n'://可以將所輸出字串的長度值賦給乙個變數。eg.int len;printf("abcdefg%n",&len);
break; //執行後變數被賦值為7.
case'a'://浮點數、十六進製制數字和p-(p-)計數法
case'a':
break;
case'e'://浮點數指數輸出
case'e':
break;
case 'g'://自動選f格式或e格式中較短的一種輸出,且浮點數不顯示無意義的零
case 'g':
break;
default:
putchar(*format);}}
else
format++;
}va_end(arg);
}//已完成:%c %d %i %u %f %o %x/x %p %s %% 未完成:(%a/a %e/e %g/g) %n
int main()
printf函式的實現
printf函式是c語言庫函式中的輸出函式。在學習stm32過程用由於需要用到串列埠列印功能,但是程式原來的printf函式列印到串列埠時,出現了大量亂碼。無奈只能自己研究一下printf函式的構成。寫個乙個簡化版的printf函式。int myprintf const char format,wh...
printf函式實現
要實現printf函式需要考慮如下三點 1.如何告訴printf傳入引數的個數 引數個數不確定。2.printf如何訪問到這些引數。3.函式呼叫完成後,系統如何釋放在堆疊的引數。printf函式的定義 原型 int cdecl printf const char format,注 cdecl是c c...
實現自己的printf函式
在嵌入式開發中,常常會通過串列埠列印一些資訊到pc終端,這就需要實現自己的printf函式,下面介紹列印函式print的實現。print.h cpp view plain copy print?ifndef print h define print h void print char fmt,voi...