printf函數
打印輸出時,可能需要指定字段間的空格數,從而把列排整齊。在print函數中使用制表符並不能保證得到想要的輸出,因此,可以用printf函數來格式化特別的輸出。
printf函數返回一個帶格式的字符串給標准輸出,如同C語言中的printf語句一樣。printf語句包括一個加引號的控制串,控制串中可能嵌有若干格式說明和修飾符。控制串后面跟一個逗號,之后是一列由逗號分隔的表達式。printf函數根據控制串中的說明編排這些表達式的格式。與print函數不同的是, printf不會在行尾自動換行。因此,如果要換行,就必須在控制串中提供轉義字符\n。
每一個百分號和格式說明都必須有一個對應的變量。要打印百分號就必須在控制串中給出兩個百分號。請參考print轉義字符和printf修飾符。格式說明由百分號引出,另外還列出了printf所用的格式說明符。
printf使用的轉義字符
轉義字符 | 定義 |
---|---|
c | 字符 |
s | 字符串 |
d | 十進制整數 |
ld | 十進制長整數 |
u | 十進制無符號整數 |
lu | 十進制無符號長整數 |
x | 十六進制整數 |
lx | 十六進制長整數 |
o | 八進制整數 |
lo | 八進制長整數 |
e | 用科學記數法(e 記數法)表示的浮點數 |
f | 浮點數 |
g | 選用e或f中較短的一種形式 |
printf的修飾符
字符 | 定義 |
---|---|
- | 左對齊修飾符 |
# | 顯示8 進制整數時在前面加個0 顯示16 進制整數時在前面加0x |
+ | 顯示使用d 、e 、f 和g 轉換的整數時,加上正負號+或- |
0 | 用0而不是空白符來填充所顯示的值 |
printf的格式說明符
格式說明符 | 功能 |
---|---|
%c | 打印單個ASCII 字符 printf("The character is %c\n",x) 輸出: The character is A |
%d | 打印一個十進制數 printf("The boy is %d years old\n",y) 輸出:The boy is 15 years old |
%e | 打印數字的e 記數法形式 printf("z is %e\n",z) 打印: z is 2.3e+0 1 |
%f | 打印一個浮點數 printf("z is %f\n", 2.3 * 2) 輸出: z is 4.600000 |
%o | 打印數字的八進制 printf("y is %o\n",y) 輸出:z is 17 |
%s | 打印一個字符串 print("The name of the culprit is %s\n",$1) 輸出:The name of the culprit is Bob Smith |
%x | 打印數字的十六進制值 printf("y is %x\n",y) 輸出:x is f |
打印變量時,輸出所在的位置稱為"域"(field),域的寬度(width)是指該域中所包含的字符個數。下面這些例子中, printf控制串里的管道符(豎杠)是文本的一部分, 用於指示格式的起始與結束。
范例
|Linux |
說明:對於echo命令的輸出,Linux是經管道發給awk。printf函數包含一個控制串。百分號讓printf做好准備,它要打印一個占15個格、向左對齊的字符串,這個字符串夾在兩個豎杠之間,並且以換行符結尾。百分號后的短划線表示左對齊。控制串后面跟了一個逗號和$1。printf將根據控制串中的格式說明來格式化字符串Linux。
范例
| Linux|
說明:字符串Linux被打印成一個占15 格、向右對齊的字符串,夾在兩個豎杠之間,以
換行符結尾。
范例
Tom Jones 4424 5/12/66 543354
Mary Adams 5346 11/4/63 28765
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
The name is Tom ID is 4424
The name is Mary ID is 5346
The name is Sally ID is 1654
The name is Billy ID is 1683
說明:要打印的字符串放置在兩個雙引號之間。第一個格式說明符是%-15s,它對應的參數是$1,緊挨着控制串的右半邊引號后面的那個逗號。百分號引出格式說明:短划線表示左對齊,15s表示占15格的字符串。這條命令用來打印一個左對齊、占15格的字符串,后面跟着字符串的ID和一個整數。
格式:%8d表示在字符串的這個位置打印$2 的十進制(整數)值。這個整數占8格,向右對齊。您也可以選擇將加引號的字符串和表達式放在圓括號里。