函數概要:
printf函數用於打印格式化字符串到標準輸出流。
函數原型:
#include <stdio.h>
....
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、如果轉換字符爲0,則第一個數字爲0 2、如果轉換字符爲x或X,則指定在輸出的非0值前加0x或0X 3、對於轉換字符爲e、E、f、、g或G的情況,指定輸出總是包含一個小數點。另外,對於轉換字符爲g或G,還指定輸出值尾部無意義的0將被保留。 |
注:flags可同時出現多個,且無順序要求。
width(寬度,可選)是一個數值,用於知道你個最小字段的寬度
轉換後的參數輸出寬度至少要達到這個數值。如果參數的字符數小於該數值,則在參數左邊(如果flags設置爲-,要求左對齊的話則在右邊)填充一些字符。填充字符通常爲空格,但是如果flags設置爲0,則填充字符爲數字0。
precision(精度,可選)通過點號(.)分隔字段的寬度和精度
- 對於字符串,它指定打印的字符的最大個數
- 對於整數,它指定打印的數字位數(必要時可填充0已達到寬度要求)
- 對於轉換字符爲 e、E 或 f ,它指定打印的小數點後的數字位數
- 對於轉換字符爲 g 或 G,它指定打印的有效數字位數
length(長度修飾符,可選)的值可以是h、hh、l、ll 或 L
- hh 表示將相應的參數按 signed char 或 unsigned char 類型輸出
- h 表示將相應的參數按 short 或 unsigned short 類型輸出
- l 表示將相應的參數按 long 或 unsigned long 類型輸出
- ll 表示將相應的參數按 long long 或 unsigned long long 類型輸出
- L 表示將相應的參數按 long double 類型輸出
2、...附加參數
該參數的個數由格式化字符串決定。
每個參數的值應當與前面格式化字符串中的佔位符類型和位置一一對應。
返回值
如果函數調用成功,返回值是實際打印的字符數(不包含表示字符串結束的'\0')
如果函數調用失敗,返回值是一個負數。