printf函數詳細講解


(1)簡介

printf函數是c語言當中非常重要的格式化輸出函

其函數原型為:int printf(const char *format, ...);

其函數返回值:打印出的字符格式

其調用格式為:printf("<格式化字符串>", <參量表>);

(2)轉換說明:

轉換格式為:%[標志][寬度][.精度][類型長度]類型

除了最后的類型之外都是可選的字段

標志
標志  意義
-

項目是左對齊的;也就是說,會把項目打印在字段的左側開始處。示例:"%-20s"

+

有符號的值若為正,則顯示帶加號的符號;若為負,則帶減號的符號。示例:"%+6.2f"

(空格)

帶符號的值若為正,則顯示時帶前導空格(但是不顯示符號);若為負,則帶減號符號。+標志會覆蓋空格標志;示例:"% 6.2f"

#

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

0

對於所有的數字格式,用前導0而不是用空格填充字段。如果出現-標志或者指定了精度(對於整數)則忽略該標志;示例:"%010d"

 

寬度,精度
修飾符 意義
digit(s) 字段寬度的最小。如果該字段不能容納要打印的數或者字符串,系統就會使用更寬的字段。示例:"%4d"
.digit(s) 精度,對於%e,%E和%f轉換,是將要在小數點的右邊打印的數字的位數。對於%g和%G轉換,是有效數字的最大位數。對於%s轉換,是將要打印的字符的最大數目。對於整數轉換,是將要打印的數字的最小位數;如果必要,要使用前導0來達到這個位數。只使用"."表示其后跟隨一個零,所以%.f和%.0f相同;示例:"%5.2f"打印一個浮點數,他的字段寬度為5個字符,小數點后面有兩位數字

 

類型長度
修飾符 意義
h 和整數轉換說明符一起使用,表示一個short int或unsigned short int類型數值;示例:"%hu" "%hd" "%hx"
hh 和整數轉換說明符一起使用,表示一個signed char或unsigned char類型數值;示例:"%hhu" "%hhd" "%hhx"
j 和整數轉換說明符一起使用,表示一個intmax_t或uintmax_t值;示例:"%jd" "%jX"
l 和整數轉換說明符一起使用,表示一個long int或unsigned long int類型數值;示例:"%lu" "%ld"
ll 和整數轉換說明符一起使用,表示一個long long int或unsigned long long int類型數值(c99);示例:"%llu" "%lld"
L 和浮點轉換說明符一起使用,表示一個long double值;示例:"%Lf" "%Le"
t 和整數轉換說明符一起使用,表示一個ptrdiff_t值(與兩個指針之間的差對應的類型)(c99);示例:"%td"
z 和整數轉換說明符一起使用,表示一個size_t值(sizeof返回類型)(c99);示例:"%zd"
I64 和整數轉換說明符一起使用,表示一個_int64值

 

轉換說明符
轉換說明 輸出
%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 使用十六進制數0x的無符號十六進制整數
%X 使用十六進制數字0X的無符號十六進制證書
%% 打印一個百分號

 

(3)示例:

 1 #include <stdio.h>
 2 
 3 int main() {
 4     const char * pString = "Hello World";
 5     const int    nNumber = 1024;
 6     const double dNumber = 3.141593;
 7     //  %d  示例
 8     printf("*%d*\n", nNumber);          //輸出:*1024*
 9     printf("*%6d*\n", nNumber);         //輸出:*  1024*
10     printf("*%6.5d*\n", nNumber);       //輸出:* 01024*
11     printf("*%-6.5d*\n", nNumber);      //輸出:*01024 *
12     printf("*%06d*\n", nNumber);        //輸出:*001024*
13     printf("*%+6d*\n", nNumber);        //輸出:* +1024*
14 
15     //  %f  示例
16     printf("*%f*\n", dNumber);          //輸出:*3.141593*
17     printf("*%10f*\n", dNumber);        //輸出:*  3.141593*
18     printf("*%10.2f*\n", dNumber);      //輸出:*      3.14*
19     printf("*%-10.2f*\n", dNumber);     //輸出:*3.14      *
20     printf("*%+10.2f*\n", dNumber);     //輸出:*     +3.14*
21     printf("*%010.2f*\n", dNumber);     //輸出:*0000003.14*
22 
23     //  %s  示例
24     printf("*%s*\n", pString);          //輸出:*Hello World*
25     printf("*%20s*\n", pString);        //輸出:*         Hello World*
26     printf("*%-20s*\n", pString);       //輸出:*Hello World         *
27     printf("*%.10s*\n", pString);       //輸出:*Hello Worl*
28     return 0;
29 }

 

(4)浮點參數的轉換:

有用於打印浮點類型double和long double的轉換說明符,但沒有用於float的說明符。原因是在K&R C中float值在被用於表達式中或者被用作參數之前,會被自動轉換成double類型。一般情況下,ANSI C不會自動把float轉換成double。不過,為了保護大量現有的假設float參數仍會自動被轉換成double。因此,不過是K&R C還是ANSI C,都無需專門的轉換說明符來顯示float。


免責聲明!

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



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