printf()輸出格式

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


翻譯內容來源:http://www.cplusplus.com/reference/cstdio/printf/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章