int printf ( const char * format, … )
- 將格式化的數據打印到標準輸出
printf()函數將上述函數定義中format指向的C字符串寫到標準輸出。如果format中包含了格式說明符(以%開頭的子序列),則format之後的附加參數將被格式化並插入到字符串中代替對應的說明符。
參數
1. format
- 包含了要寫入標準輸出的文本的C字符串
它可以可選地包含一些格式說明符,這些說明符可以被附加參數替換並按要求格式化。
格式說明符的形式如下:
%[標誌][寬度][.精度][長度]類型
1.1 類型
類型 | 輸出 | 例子 |
---|---|---|
d或i | 帶符號十進制整形 | 392 |
u | 無符號十進制整形 | 7235 |
o | 無符號八進制數 | 610 |
x | 無符號十六進制整形 | 7fa |
X | 無符號十六進制整形(大寫) | 7FA |
f | 十進制浮點數,小寫 | 392.65 |
F | 十進制浮點數,大寫 | 392.65 |
e | 科學計數法(尾數/指數),小寫 | 3.9265e+2 |
E | 科學計數法(尾數/指數),大寫 | 3.9265E+2 |
g | 使用最短的表示: %e 或 %f | 392.65 |
G | 使用最短的表示: %E 或 %F | 392.65 |
a | 十六進制浮點數,小寫 | -0xc.90fep-2 |
A | 十六進制浮點數,大寫 | -0XC.90FEP-2 |
c | 字符 | a |
s | 字符串 | sample |
p | 指針地址 | b8000000 |
n | 不打印。相應的參數必須是指向帶符號整形的指針,到目前爲止寫入的字符數將被存儲在指向的位置。 | |
% | 跟在一個%字符後面的另一個%將會寫入一個% | % |
1.2 標誌
標誌 | 描述 |
---|---|
- | 在給定字段寬度內左對齊; 右對齊是默認的(見寬度子說明符)。 |
+ | 使結果帶上正負符號(+或-)即使結果是正數;默認只有負數纔會有正負符號。 |
(space) | 如果沒有寫入正負符號,則插入一個空格。 |
# | 與o,x或X說明符一起使用,會在0以外的數字前加上0,0x或0X的前綴;與a,A,e,E,f,F,g或G一起使用,即使沒有小數,也會強制書寫輸出包含一個小數點。,默認情況下,如果沒有小數,則不會寫入小數點。 |
0 | 在填充時,用零(0)替代空格(見寬度子說明符)。 |
1.3 寬度
寬度 | 描述 |
---|---|
(數字) | 要打印的最小字符數。如果要打印的值長度小於此數字,結果將填充空格;若值長度大於此數字,該值也不會被截斷。 |
* | 寬度在format字符串中未指定,但需要在附加參數中指定。 |
1.4 精度
精度 | 描述 |
---|---|
.數字 | 對於整數類型(d,i,o,u,x,X):精度指定要寫入的最小位數:如果要寫入的值比此數字短,結果將以前導零填充;即使結果較長,該值也不會被截斷;精度爲0表示對於值0,沒有字符被寫入。對於a,A,e,E,f和F類型:這是小數點後要打印的位數(默認爲6)。對於g和G類型:這是要打印的有效數字的最大數量。對於s類型:這是要打印的最大字符數; 默認情況下將打印所有字符,直到遇到結尾的空字符爲止。如果指定精度時沒有一個明確的精度值,則假定爲0。 |
.* | 在format字符串中未指定精度,但需要在附加參數中指定。 |
1.5 長度
長度 | d i | u o x X | f F e E g G a A | c | s | p | n |
---|---|---|---|---|---|---|---|
(none) | int | unsigned int | double | int | char* | void* | int* |
hh | signed char | unsigned char | signed char* | ||||
h | short int | unsigned short int | short int* | ||||
l | long int | unsigned long int | wint_t | wchar_t* | long int* | ||
ll | long long int | unsigned long long int | long long int* | ||||
j | intmax_t | uintmax_t | intmax_t* | ||||
z | size_t | size_t | size_t* | ||||
t | ptrdiff_t | ptrdiff_t | ptrdiff_t* | ||||
L | long double |
注意對於c類型:它使用了一個int(或wint_t)作爲參數,但是在將其格式化爲輸出之前,將其轉換成爲了char值(或wchar_t)。
Note:加粗並斜體的符號屬於C99標準
2. 附加參數
根據format字符串,該函數可能會需要附加參數序列,每個參數包含一個值,用於替換format字符串中的格式說明符(或指向存儲位置的指針)。這些參數應至少與格式說明符中指定的值一樣多。 函數忽略其他參數。
返回值
若執行成功,返回寫入的字符總數。
如果發生寫入錯誤,則設置錯誤指示器(ferror),並返回負數。
如果寫入寬字符時出現多字節字符編碼錯誤,則將errno設置爲EILSEQ,並返回負數。
例子
/* printf example */
#include <stdio.h>
int main()
{
printf ("Characters: %c %c \n", 'a', 65);
printf ("Decimals: %d %ld\n", 1977, 650000L);
printf ("Preceding with blanks: %10d \n", 1977);
printf ("Preceding with zeros: %010d \n", 1977);
printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
printf ("Width trick: %*d \n", 5, 10);
printf ("%s \n", "A string");
return 0;
}
輸出:
Characters: a A
Decimals: 1977 650000
Preceding with blanks: 1977
Preceding with zeros: 0000001977
Some different radices: 100 64 144 0x64 0144
floats: 3.14 +3e+000 3.141600E+000
Width trick: 10
A string