函式概要:
printf 函式用於列印格式化字串到標準輸出流。
函式原型:
#include ...
int printf ( const char * format, ... );
引數解析:1、format 引數format 引數是乙個格式化字串,由格式化佔位符和普通字元組成。
格式化佔位符(以 % 開頭)用於指明輸出的引數值如何格式化。
格式化佔位符的語法如下:
%[flags][width][.precision][length]specifier
每乙個格式化佔位符均以 % 開始,以轉換字元結束。
specifier(轉換字元,必選)的內容及含義如下:
轉換字元
引數型別;轉換結果c
char;字元
d
int;有符號十進位制整數
i 同上e
double;以指數形式輸出單、雙精度浮點數(小寫 e)
e
同上(大寫 e)
f
double;以小數形式輸出單、雙精度浮點數
g
double;以 %f 或 %e 中較短的輸出寬度輸出單、雙精度浮點數(指數顯示小寫 e)
g
同上(指數顯示大寫 e)
o
unsigned int;無符號八進位制(無前導 0)
s
char *;字串
u
int;無符號十進位制
x
unsigned int;無符號十六進製制(無前導 0x)
x
同上(無前導 0x)
p
void *;指標值
n
int *;存放已寫字元的個數
%
不進行引數轉換;% 自身
注:如果 % 後邊的字元不是轉換字元,則其行為沒有定義。
flags(標誌,可選)的內容即含義如下:
標誌
含義-
指定被轉換的引數在其字段內左對齊(預設是右對齊)
+
指定在輸出的數前面加上正負號
空格
如果第乙個字元不是正負號,則在其前面加上乙個空格
0
對於數值轉換,當輸出長度小於字段寬度時,新增前導 0 進行填充
#
指定另一種輸出形式:
1. 如果轉換字元為 o,則第乙個數字為 0
2. 如果轉換字元為 x 或 x,則指定在輸出的非 0 值前加 0x 或 0x
3. 對於轉換字元為 e、e、f、g 或 g 的情況,指定輸出總是包含乙個小數點。另外,對於轉換字元為 g 或 g,還指定輸出值尾部無意義的 0 將被保留
注:flags 可同時出現多個,且無順序要求。
width(寬度,可選)是乙個數值,用於指定最小字段的寬度
轉換後的引數輸出寬度至少要達到這個數值。如果引數的字元數小於該數值,則在引數左邊(如果 flags 設定為 -,要求左對齊的話則在右邊)填充一些字元。填充字元通常為空格,但是如果 flags 設定為 0,則填充字元為數字 0。
.precision(.精度,可選),通過點號(.)分隔欄位的寬度和精度
length(長度修飾符,可選)的值可以是 h、hh、l、ll 或 l
2、... 附加引數
該引數的個數由格式化字串決定。
每個引數的值應當與前面格式化字串中的佔位符型別和位置一一對應。
返回值:
如果函式呼叫成功,返回值是實際列印的字元數(不包含表示字串結束的 '\0');
如果函式呼叫失敗,返回值是乙個負數。
如果函式呼叫成功,返回值是實際列印的字元數(不包含表示字串結束的 '\0');
如果函式呼叫失敗,返回值是乙個負數。
printf函式詳解
printf 格式轉換的一般形式如下 flags width prec type 以括號括起來的引數為選擇性引數,而 與type則是必要的。底下先介紹type的幾種形式 d 整數的引數會被轉成一有符號的十進位制數字 u 整數的引數會被轉成一無符號的十進位制數字 o 整數的引數會被轉成一無符號的八進位...
printf函式實現
要實現printf函式需要考慮如下三點 1.如何告訴printf傳入引數的個數 引數個數不確定。2.printf如何訪問到這些引數。3.函式呼叫完成後,系統如何釋放在堆疊的引數。printf函式的定義 原型 int cdecl printf const char format,注 cdecl是c c...
學習printf函式
今天想學習printf函式,有幾個疑問?1 如何實現可變引數。2 如何將記憶體的東西輸入螢幕。3 是將各種格式的引數都轉化為字串輸入,還是以各種格式輸出。4 如果引數有表示式,比如printf i 9 4d 4d n 該怎麼處理。5 如何自己寫乙個printf函式。其實還有很多相關的函式如 spri...