int printf(const char *format,[argument]);函數
format 參數輸出的格式,定義格式爲:spa
%[flags][width][.perc] [F|N|h|l]type指針
規定數據輸出方式,具體以下:orm
1.type 含義以下:對象
整數 %d 整數的參數會被轉成一有符號的十進制數字 %u 整數的參數會被轉成一無符號的十進制數字 %o 整數的參數會被轉成一無符號的八進制數字 %x 整數的參數會被轉成一無符號的十六進制數字,並以小寫abcdef表示 %X 整數的參數會被轉成一無符號的十六進制數字,並以大寫ABCDEF表示浮點型數字符串
%f double 型的參數會被轉成十進制數字,並取到小數點如下六位,四捨五入。 %e double型的參數以指數形式打印,有一個數字會在小數點前,六位數字在小數點後,而在指數部分會以小寫的e來表示。 %E 與%e做用相同,惟一區別是指數部分將以大寫的E 來表示。 %g double 型的參數會自動選擇以%f 或%e 的格式來打印,其標準是根據欲打印的數值及所設置的有效位數來決定。 %G 與%g 做用相同,惟一區別在以指數形態打印時會選擇%E 格式。form
字符及字符串 %c 整型數的參數會被轉成unsigned char型打印出。 %s 指向字符串的參數會被逐字輸出,直到出現NULL字符爲止 %p 若是是參數是「void *」型指針則使用十六進制格式顯示,near指針表示爲:XXXX,far 指針表示爲:XXXX:YYYY變量
%% 顯示百分號自己 擴展
%n 相連參量應是一個指針,其中存放已寫字符的個數語法
2.flags 規定輸出格式,取值和含義以下:
無右對齊,左邊填充0和空格
- 左對齊,右邊填充空格
+ 在數字前增長符號 + 或 -
一個空格只對負數顯示符號
# 當type=c,s,d,i,u時沒有影響
type=o,x,X時,分別在數值前增長'0',"0x","0X"
type=e,E,f時,老是使用小數點
type=g,G時,除了數值爲0外老是顯示小數點
3.width 用於控制顯示數值的寬度,取值和含義以下
n(n=1,2,3...) 寬度至少爲n位,不夠以空格填充
0n(n=1,2,3...) 寬度至少爲n位,不夠左邊以0填充 *
格式列表中,下一個參數仍是width
4..prec 用於控制小數點後面的位數,取值和含義以下:
無按缺省精度顯示
0 當type=d,i,o,u,x時,沒有影響
type=e,E,f時,不顯示小數點
n(n=1,2,3...) 當type=e,E,f時表示的最大小數位數
type=其餘,表示顯示的最大寬度 .*
格式列表中,下一個參數仍是width
5.F|N|h|l 表示指針是不是遠指針或整數是不是長整數
F 遠指針
n 近指針
h 短整數或單精度浮點數
l 長整數或雙精度浮點數
-------------------------------------------------------------------------------------------
1.通常格式
printf(格式控制,輸出表列)
例如:printf("i=%d,ch=%c\n",i,ch);
說明:
(1)「格式控制」是用雙撇號括起來的字符串,也稱「轉換控制字符串」,它包括兩種信息:
①格式說明:由「%」和格式字符組成,它的做用是將輸出的數據轉換爲指定的格式輸出。
②普通字符,即須要原樣輸出的字符。
(2)「輸出表列」是須要輸出的一些數據,能夠是表達式
(3)printf函數的通常形式能夠表示爲
printf(參數1,參數2,……,參數n)
功能是將參數2~參數n按參數1給定的格式輸出
2.格式字符(9種)
(1)d(或i)格式符。用來輸出十進制整數,有如下幾種用法:
①%d,按整型數據的實際長度輸出。
②%md,m爲指定的輸出字段的寬度。若是數據的位數小於m,則左端補以空格,若大於m,則按實際位數輸出。
③%ld(%mld 也可),輸出長整型數據。
例如:long a=123456;
printf("%ld",a);
(2)o格式符,以八進制數形式輸出整數。格式:%o,%mo,%lo,%mlo均可。
(3)x(或X)格式符,以十六進制數形式輸出整數。格式:%x,%mx,%lx,%mlx均可。
(4)u格式符,用來輸出unsigned型數據,即無符號數,以十進制數形式輸出。格式:%u,%mu,%lu均可。
參見:li4-3.c
(5)c格式符,用來輸出一個字符。格式:%c,%mc均可。
(6)s格式符,用來輸出一個字符串。格式:%s,%ms,%-ms,%m.ns,%-m.ns均可。
參見:li4-5.c
(7)f格式符,用來輸出實數(包括單、雙精度),以小數形式輸出。格式:%f,%m.nf,%-m.nf均可。
注意:單精度實數的有效位數通常爲7位,雙精度爲16位。
參見:li4-6.c
li4-7.c
li4-8.c
(8)e(或E)格式符,以指數形式輸出實數。格式:%e,%m.ne,%-m.ne均可。
(9)g(或G)格式符,用來輸出實數,它根據數值的大小,自動選f格式或e格式(選擇輸出時佔寬度較小的一種)。
3.說明
(1)除了X、E、G(用大寫字母表示)外,其餘格式字符必須用小寫字母;
(2)「格式控制」字符串內能夠包含轉義字符;
(3)若是想輸出字符「%」,則應該在「格式控制」字符串中用連續兩個%表示,如:
printf("%f%%",1.0/3);
(4)格式字符表參見下表
表4.1 printf格式字符
格式字符說明
d,i 以帶符號的十進制形式輸出整數(正數不輸出符號)
o 以八進制無符號形式輸出整數(不輸出前導符0)
x,X 以十六進制無符號形式輸出整數(不輸出前導符0x),用x則輸出十六進制數的a~f時以小寫形式輸出,用X時,則以大寫字母輸出
u 以無符號十進制形式輸出整數
c 以字符形式輸出,只輸出一個字符
s 輸出字符串
f 以小數形式輸出單、雙精度數,隱含輸出6位小數
e,E 以指數形式輸出實數
g,G 選用%f或%e格式中輸出寬度較短的一種格式,不輸出無心義的0
表4.2 printf的附加格式說明字符
字符
說明
字母l
用於長整型整數,可加在格式符d、o、x、u前面
m(表明一個正整數)
數據最小寬度
n(表明一個正整數)
對實數,表示輸出n位小數;對字符串,表示截取的字符個數
-
輸出的數字或字符在域內向左靠
------------------------------------------------------------------------------------
用途
寫格式化輸出。
語法
printf Format [ Argument ... ]
描述
printf 命令轉換、格式化並寫 Argument 參數到標準輸出。Argument 參數是由 Format 參數控制格式化的。格式化輸出行不能超出 LINE_MAX 字節長度。
下列環境變量影響 printf 命令的執行:
LANG 在 LC_ALL 和相應的環境變量(以 LC_ 開頭)沒有指定語言環境時,肯定語言環境編目使用的語言環境。
LC_ALL 肯定用於覆蓋由 LANG 或其它任何 LC_ 環境變量設置的任何語言環境編目值的語言環境。
LC_CTYPE 肯定把文本字節數據順序解釋爲字符的語言環境;例如,單一字節對應多字節字符的參數。
LC_MESSAGES 肯定寫消息使用的語言。
LC_NUMERIC 肯定數字格式編排的語言環境。此環境變量影響使用 e、E、f、g 和 G 轉換字符編寫的數字的格式。
Format 參數是包含三種對象類型的一個字符串:
* 無格式字符複製到輸出流。
* 轉換規範,每一個規範致使在值參數列表中檢索 0 個或更多個項。
* 如下轉義序列。在複製到輸出流時,這些序列致使它們的相關操做在有此功能的設備上顯示:
\\ 反斜槓
\a 警告
\b 退格
\f 換頁
\n 換行
\r 回車
\t 跳格
\v 垂直跳格
\ddd ddd 是 一、2 或 3 位八進制數字。這些轉義序列做爲由八進制數指定的具備數字值的字節顯示。
Argument 參數是一個或多個字符串的列表,它在 Format 參數的控制下被寫到標準輸出。
Format 參數在必要的狀況下會常常從新使用以知足 Argument 參數。將好像提供了空字符串 Argument 同樣評估任何額外的 c 或者 s 轉換規範;其它額外轉換規範將好像提供了 0 Argument 同樣評估。此處 Format 參數不包含轉換規範僅出現 Argument 參數,結果是不肯定的。
每一個 Format 參數中的轉換規範都具備以下順序的語法:
1. % (百分號)。
2. 零或更多的選項,修改轉換規範的含義。選項字符和它們的含義是:
- 轉換結果在字段中左對齊。
+ 符號轉換結果常以符號(+ 或者 -)開始。
空格若是符號轉換的第一個字符不是符號,結果的前綴將是空格。若是空格和 + 選項字符都顯示,則忽略空格選項字符。
# 此選項指定值轉換到備用格式。對於 c、d、i, u 和 s 轉換,選項沒有做用。對於 o 轉換,它增長精度來強制結果的第一數字是 a、0(零)。對於 x 和 X 轉換,非零結果分別具備 0x 或 0X 前綴。對於 e、E、 f、g 和 G 轉換,結果一般包含基數字符,即便基數字符後沒有數字。對於 g 和 G 轉換,結尾零不象一般同樣除去。
0 對於 d、i、o、 u、x、e、 E、f、g 和 G 轉換,前導零(跟在符號或底數的後面)用於填充字段寬度,將不用空格填充。若是顯示 0(零)和 -(減號)選項,0(零)選項被忽略。對於 d、i、o、u、x 和 X 轉換,若是指定精度,0(零)選項將被忽略。
注:
其它轉換,沒有定義其行爲。
3. 可選的指定最小值字段寬度的十進制數字字符串。若是轉換值字符少於字段寬度,該字段將從左到右按指定的字段寬度填充。若是指定了左邊調整選項,字段將在右邊填充。若是轉換結果寬於字段寬度,將擴展該字段以包含轉換後的結果。不會發生截斷。然而,小的精度可能致使在右邊發生截斷。
4. 可選的精度。精度是一個.(點)後跟十進制數字字符串。若是沒有給出精度,按 0(零)對待。精度指定:
* d、o、i、 u、x 或 X 轉換的最少數字顯示位數。
* e 和 f 轉換的基數字符後的最少數字顯示位數。
* g 轉換的最大有效數字位數。
* s 轉換中字符串的最大打印字節數目。
5. 指示要應用的轉換類型的一個字符,例如:
% 不進行轉換。打印一個 %(百分號)。
d, i 接受整數值並將它轉換爲有符號的十進制符號表示法。精度指定顯示的最小數字位數。若是值轉換後能夠用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度爲零的零值轉換的結果是空字符串。用零做爲前導字符來指定字段寬度,致使用前導零填充字段寬度值。
o 接受整數值並將它轉換爲有符號的八進制符號表示法。精度指定顯示的最小數字位數。若是值轉換後能夠用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度爲零的零值轉換的結果是空字符串。用零做爲前導字符來指定字段寬度,致使用前導零填充字段寬度值。不用八進制值表示字段寬度。
u 接受整數值並將它轉換爲無符號的十進制符號表示法。精度指定顯示的最小數字位數。若是值轉換後能夠用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度爲零的零值轉換的結果是空字符串。用零做爲前導字符來指定字段寬度,致使用前導零填充字段寬度值。
x, X 接受整數值並將它轉換爲十六進制符號表示法。字母 abcdef 用於 x 轉換,字母 ABCDEF 用於 X 轉換。精度指定顯示的最小數字位數。若是值轉換後能夠用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度爲零的零值轉換的結果是空字符串。用零做爲前導字符來指定字段寬度,致使用前導零填充字段寬度值。
f 接受浮點或者雙精度值並將它轉換爲十進制符號表示法,格式爲 [-] ddd.ddd。基數字符(在這裏顯示爲十進制點)後的數字位數等於規定的精度。 LC_NUMERIC 語言環境編目肯定在這個格式中使用的基數字符。若是不指定精度,則輸出六個數字。若是精度是 0(零),將不顯示基數字符。
e, E 接受浮點或者雙精度值並將它轉換爲指數表示的形式 [-] d.dde{+|-}dd。在基數字符前有一個數字(在這裏顯示爲十進制點),基數字符後的數字位數等於規定的精度。 LC_NUMERIC 語言環境編目肯定在這個格式中使用的基數字符。若是不指定精度,則輸出六個數字。若是精度是 0(零),將不顯示基數字符。E 轉換字符在指數前生成帶 E 而不是帶 e 的數字。指數一般至少包含兩個數字。然而,若是要打印的指數值大於兩個數字,必要時須要打印附加指數數字。
g、G 接受浮點和雙精度值並轉換爲 f 或 e 轉換字符的樣式(或在 G 轉換的狀況下是 E),用精度指定有效數字的個數。尾零將從結果中除去。基數字符只有在其後是數字時顯示。使用的樣式取決於轉換的值。樣式 g 僅在轉換的指數結果小於 -4,或大於或等於精度時使用。
c 接受值將其做爲字符串並打印字符串中的第一個字符。
s 接受值將其做爲字符串並打印字符串中的字符直到字符串結束或者達到精度指示的字符個數。若是沒有指定精度,打印所有字符直到出現第一個空字符。
b 接受值將其做爲字符串,可能包含反斜槓轉義序列。打印來自轉換字符串的字節直到字符串結束或者達到精度規範指示的字節數。若是沒有指定精度,打印所有字節直到出現第一個空字符。
支持下列反斜槓轉義序列:
* 先前列出的反斜槓轉義序列在 Format 參數描述下。這些轉義序列將被轉換到它們表示的單個字符。
* \c(反斜槓 c)序列,它不顯示並使 printf 命令忽略 Format 參數中的字符串參數包含的剩餘的全部字符串,全部剩餘的字符串參數和全部附加字符。
退出狀態
該命令返回如下出口值:
0 成功完成。
>0 發生錯誤。
示例
1. 輸入下列命令:
printf "%5d%4d\n" 1 21 321 4321 54321
產生下列輸出:
1 21
3214321
54321 0
三次使用 Format 參數打印全部給定字符串。0(零)由 printf 命令提供以知足最後的 %4d 轉換規格。
2. 輸入下列命令
printf "%c %c\n" 78 79
產生下列輸出:
7 7
文件
/usr/bin/printf 包含 printf 命令。