原型
extern int printf(const char *format,...);
功能
在c語言中產生格式化輸出的函式(定義在 stdio.h 中),其向未重定向終端(顯示器、控制台等)輸出字元。
用法
format
Format 參數是包含三種對象類型的一個字元串:
* 無格式字元複製到輸出流;
* 轉換規範,每個規範導致在值參數列表中檢索 1 個或更多個項;
* 轉義序列。
通常意義上format的格式如下:
%[flags][width][.prec][F|N|h|l]type
規定輸出數據的格式,具體如下:
type
type的字元用於規定輸出數據的類型,含義如下:
字元 | 對應數據類型 | 含義 |
d / i | int | 接受整數值並將它表示為有符號的十進制整數,i是老式寫法 |
o | unsigned int | 無符號8進制整數(不輸出前綴0) |
u | unsigned int | 無符號10進制整數 |
x / X | unsigned int | 無符號16進制整數,x對應的是abcdef,X對應的是ABCDEF(不輸出前綴0x) |
f(lf) | double | 單精度浮點數和雙精度浮點數用f(lf 在C99開始加入標準,意思和 f 相同) |
e / E | double | 科學計數法表示的數,此處"e"的大小寫代表在輸出時用的“e”的大小寫 |
g / G | double | 有效位數,如:%.8g表示單精度浮點數保留8位有效數字。 |
c | char | 字元型。可以把輸入的數字按照ASCII碼相應轉換為對應的字元 |
s / S | char * / wchar_t * | 字元串。輸出字元串中的字元直至字元串中的空字元(字元串以'\0‘結尾,這個'\0'即空字元) |
p | void * | 以16進制形式輸出指針 |
n | int * | 到此字元之前為止,一共輸出的字元個數,不輸出文本 |
% | 無輸入 | 不進行轉換,輸出字元‘%’(百分號)本身 |
m | 無 | 列印errno值對應的出錯內容,(例: printf("%m\n"); ) |
註:%g、%G在小數點位數四位或指數大於等於精度時用%e、%E,否則用%f。
flags
flags 規定輸出樣式,取值和含義如下:
字元 | 字元名稱 | 說明 |
- | 減號 | 左對齊,右邊填充空格(默認右對齊) |
+ | 加號 | 在數字前增加符號 + 或 - |
0 | 數字零 | 將輸出的前面補上0,直到占滿指定列寬為止(不可以搭配使用“-”) |
空格 | 輸出值為正時加上空格,為負時加上負號 | |
# | 井號 | type是o、x、X時,增加前綴0、0x、0X type是e、E、f、g、G時,一定使用小數點 type是g、G時,尾部的0保留 |
width
用於控制顯示數值的寬度,取值和含義如下:
n(n=1,2,3,4,5,6...): 寬度至少為n位,不夠以空格填充。
* 格式列表中,下一個參數還是width
width是一個可選的指定最小值欄位寬度的十進制數字字元串。如果轉換值字元少於欄位寬度,該欄位將從左到右按指定的欄位寬度填充。如果指定了左邊調整選項,欄位將在右邊填充。如果轉換結果寬於欄位寬度,將擴展該欄位以包含轉換後的結果。不會發生截斷。然而,小的精度可能導致在右邊發生截斷。
prec
用於控制小數點後面的位數,取值和含義如下:
無按預設精度顯示0
當type=d,i,o,u,x時,沒有影響;
type=e,E,f時,不顯示小數點
n(n=1,2,3...)
當type=e,E,f時表示的最大小數位數;
type=其他,表示顯示的最大寬度
prec是指可選的精度。精度是一個 .(點)後跟十進制數字字元串。如果沒有給出精度,按 0(零)對待。精度指定:
* d、o、i、 u、x 或 X 轉換的最少數字顯示位數。
* e 和 f 轉換的基數字元後的最少數字顯示位數。
* g 轉換的最大有效數字位數。
* s 轉換中字元串的最大列印位元組數目。
F|N|h|l
表示指針是否是遠指針或整數是否是長整數
F 遠指針
N 近指針
h 短整數(short int)
l 長整數(long int) (此處如果與d搭配為%lld則為long long int(C99),與f搭配為%llf則為long double(C99))
[Argument]
包含需要輸出的數據,可以是常量(字元常量、數字常量、字元串常量),變數,以及運算式。此處的數據應當與前面的format中的格式控制符一一對應(如果不對應會產生錯誤)。
例如:
轉義序列
這些轉義序列在字元串中會被自動轉換為相應操作命令
表示
符號 | 意義 | 符號 | 意義 |
\a | 鈴聲(提醒) | \b | Backspace |
\f | 換頁 | \n | 換行 |
\r | 回車 | \t | 水平制表符 |
\v | 垂直制表符 | \’ | 單引號 |
\” | 雙引號 | \\ | 反斜槓 |
\? | 文本問號 | \ ooo (例如\024) | ASCII字元(OCX) |
\xhh (例如:\x20) | ASCII字元(HEX) | \xhhhh | 寬字元(2位元組HEX) |
例如,WCHAR f = L'\x4e00' 或 WCHAR b[] = L"The Chinese character for one is \x4e00"。
函式返回值
printf 函式的一般形式為:
以上形式,我們在Visual C++里輸入“printf”(將會看到)。
說明printf函式類型為整型,其返回值是整型值。
其值為printf實際控制輸出的 字元 數。
printf函式實際上是將所有參數按字元輸出,根據該函式的參數1(const char *format),我們不難理解。
例如:
以上程式將會輸出:
程式舉例例一:
例二
printf 也可以這樣用(具體請參照 C 語法,字元串相關內容。這不是 printf 特有功能):
輸出:
123
注意:
的輸出結果與
是相同的。
因此輸出多行時,也並不需要每行調用一次printf。
例三
妙用printf判斷閏年程式
(此例中用到了?:的運算符)
例四
(此例中使用了scanf函式和strcpy函式)
其中前邊*定義的是總的寬度,後邊*是指定輸出字元個數。分別對應外邊參數m和n。
輸入:
10 3
輸出:
Hap環境變數
下列環境變數影響 printf 命令的執行:
LANG 在 LC_ALL 和相應的環境變數(以 LC_ 開頭)沒有指定語言環境時,確定語言環境編目使用的語言環境。
LC_ALL 確定用於覆蓋由 LANG 或其它任何 LC_環境變數設定的任何語言環境編目值的語言環境。
LC_CTYPE 確定把文本位元組數據順序解釋為字元的語言環境;例如,單一位元組對應多位元組字元的參數。
LC_MESSAGES 確定寫訊息使用的語言。
LC_NUMERIC 確定數字格式編排的語言環境。此環境變數影響使用 e、E、f、g 和 G 轉換字元編寫的數字的格式。