【C語言】printf函數詳解


C語言printf函數詳解

 一、相關基礎知識                                                 

請求printf()打印變量的指令取決於變量的類型,例如打印整數用%d符號,打印字符用%c符號,這些符號稱為轉換說明(conversion specification),因為它們指定了如何把數據轉換成可顯示的形式

 二、具體內容                                                     

printf的使用格式:

printfControl-stringitem1item2,。。。);

 

控制字符串(control-string):是一個描述項目如何打印的字符串,所以需要使用雙引號“”,以及應該為每個要打印的項目包含一個轉換說明符,且必須一一對應,不可多一少一,就算在最好情況下也只能得到無意義的值!

項目:item1item2等等都是要打印的項目,可以是變量、常量,甚至可以是需要計算的表達式

下列列出的是ANSI C標准printf()提供的各種轉換說明

轉換說明

輸出

%a

浮點數、十六進制數字和p-記數法(C99)

%A

浮點數、十六進制數字和P-記法(C99)

%c

一個字符

%d

有符號十進制整數

%e

浮點數、e-記數法

%E

浮點數、E-記數法

%f

浮點數、十進制記數法

%g

根據數值不同自動選擇%f或%e%e格式在指數小於-4或者大於等於精度時使用

%G

根據數值不同自動選擇%f或%E%E格式在指數小於-4或者大於等於精度時使用

%i

有符號十進制數(與%d相同)

%o

無符號八進制整數

%p

指針

%s

字符串

%u

無符號十進制整數

%x

使用十六進制數字0f的無符號十六進制整數0f中是數字0,而不是字母o

%X

使用十六進制數字0F的無符號十六進制整數

%%

打印一個百分號

 

可以在%和定義轉換字符之間通過插入修飾符對基本的轉換說明加以修改,如果使用了一個以上的修飾符,那么它們應該與上表中出現的順序相同,也並不是所有的組合都是可能的

 

 

下列列出的是printf()修飾符

修飾符

意義

標志

五種標志 (-、+、空格、0) 都將在后表中描述,可以使用零個或多個標志

例如:”%-10d”

digit(s)

 

字段寬度的最小值。如果該字段不能容納要打印的數或者字符串,系統會使用更寬的字段。示例:“%4d”,字段寬度包括符號,即12.235位!

即A.B形式中的A,下面的精度為A.B形式中的B當位數不足會在前面自動補空格,超過正常顯示

.digit(s)

 

 

精度。對於%e%E%f轉換,是將要在小數點的右邊打印的數字的位數。對於%g%G轉換,是有效數字的最大位數。對於%s轉換,是將要打印的字符的最大數目。對於整數轉換,是將要打印的數字的最小位數;如果必要,要使用前導零來達到這個位數。只使用“.”表示其后跟隨一個零,所以%.f%.0f相同。示例:“%5.2f”打印一個浮點數,他的字段寬度為5個字符,小數點后有兩個數字。

h

和整數轉換說明符一起使用,表示一個short int 或者 unsigned short int 類型數值。

示例:“%hu”“%hx”“%6.4hd”

hh

 

和整數轉換說明符一起使用,表示一個signed char 或者unsigned char類型數值。

示例:“%hhu”“%hhx”“%6.4hhd”

j

 

和整數轉換說明符一起使用,表示一個intmax_tuintmax_t值。

示例:“%jd”“%8jX”

l(字母)

 

和整數說明符一起使用,表示一個long int 或者unsigned long int 類型值。

示例:“%ld”“%8lu”

ll(字母)

 

和整數說明符一起使用,表示一個long long int unsigned long long int 類型值 (C99)。

示例:“%lld”“%8llu”

L

 

和浮點轉換說明符一起使用,表示一個long double值。

示例:“%Lf”“%10.4Le”

t

 

和整數轉換說明符一起使用,表示一個ptrdiff_t(與兩個指針之間的差相對應的類型) (C99)

示例:“%td”“%12ti”

z

 

和整數轉換說明符一起使用,表示一個size_t(sizeof返回的類型(C99)。

示例:“%zd”“%12zx”

下列列出的是printf()的標志

標志

意義

-

項目是左對齊的:也就是說,會把項目打印在字段的左側開始處

例如:”%-20s”

+

有符號的值若為正,則顯示帶加號的符號:若為負,則帶減號的符號

例如:”%+6.2f”

(空格)

有符號的值若為正,則顯示帶前導空格(但是不顯示符號):若為負,則帶減號符號。+標示會覆蓋空格標志

例如:”% 6.2f”

#

使用轉換說明的可選形式。若為%o格式,則以0開始;若為%x%X格式,則以0x0X開始,對於所有的浮點形式,#保證了即使不限任何數字,也打印一個小數點字符。對於%g%G格式,它防止尾隨零被刪除。

例如:“%#o”、“%#8.0f”和“%+#10.3E

0

對於所有的數字格式,用前導零而不是用空格填充字段寬度。如果出現-標志或者指定了精度(對於整數)則忽略該標志。

例如:“%010d”和“%08.3f

 

 

 

printf函數也有一個返回值,它返回所打印的字符的數目,如果輸出錯誤,那么printf()會返回一個負數,使用返回值得一個可能原因是要檢查輸出錯誤,比如在讀入文件輸出的時候進行判斷

 三、分析總結                                                     

當打印較多內容時可以采用下列兩種方法:

一、使用反斜杠符號 \  ,在上一行的末尾加上,下一行即可繼續,注意下一行必須刪除前面的空格,否則也會輸出前面的空格

 

例如:

    printf("asdasdad\

sadasdadad\n");          //輸出連續的字符串

    

    printf("asdasdad\

sadasdadad\n");     //輸出帶空格的字符串,asdasda      adadasdas

 

二、可直接使用多個雙引號拼接,可不用刪除前面的空格,建議使用

 

例如:

    printf("sadasda"

"dasdada"

         "dasdada"

"dasdada");            //輸出連續的asdadadadasdadadasdadadada

 

 

    

 四、實例測試                                                     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM