c實現的printf函式

2021-08-13 17:40:26 字數 2859 閱讀 3297

#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...