C語言 printf()函數的格式控制符

C語言中,printf()函數針對輸出不一樣的數據類型,有不一樣的格式控制符,此處彙總了一些經常使用的格式控制符:函數

  • %hd用來輸出 short int 類型,hd 是 short decimal 的簡寫;
  • %d用來輸出 int 類型,d 是 decimal 的簡寫;
  • %ld用來輸出 long int 類型,ld 是 long decimal 的簡寫。
  • %c:輸出一個字符。c 是 character 的簡寫。
  • %s:輸出一個字符串。s 是 string 的簡寫。
  • %f:輸出一個小數。f 是 float 的簡寫。

 

在輸出整數方面,格式控制符和整數的符號是緊密相關的,具體就是:spa

  • %d 以十進制形式輸出有符號數;
  • %u 以十進制形式輸出無符號數;
  • %o 以八進制形式輸出無符號數;
  • %x 以十六進制形式輸出無符號數。

printf函數並不支持「輸出負的八進制或者十六進制數」。code

下表總結了不一樣類型的整數,以不一樣進制的形式輸出時對應的格式控制符(--表示沒有對應的格式控制符)blog

  short int long unsigned short unsigned int unsigned long
八進制 -- -- -- %ho %o %lo
十進制 %hd %d %ld %hu %u %lu
十六進制 -- -- -- %hx 或者 %hX %x 或者 %X %lx 或者 %lX

對於一個有符號的正數,它的符號位是0,當按照無符號數的形式讀取時,符號位就變成了數值位,可是該位剛好是0而不是1,所以,用%o或者%x輸出,不會有影響;內存

若是一個有符號整數是負數,這時候用%o或者%x輸出,則結果就會截然不同。ci

能夠說,「有符號正數的最高位是0」這個巧合才使得%o和%x輸出有符號數時不會出錯字符串

 

小數的輸出格式:string

  • %f 以十進制形式輸出float類型;
  • %lf 以十進制形式輸出double類型;
  • %e 以指數形式輸出float類型,輸出結果中的 e 小寫;
  • %E 以指數形式輸出float類型,輸出結果中的 E 大寫;
  • %le 以指數形式輸出double類型,輸出結果中的 e 小寫;
  • %lE 以指數形式輸出double類型,輸出結果中的 E 大寫。

下面有一段演示代碼io

#include <stdio.h>
#include <stdlib.h>
int main()
{
    float a = 0.302;
    float b = 128.101;
    double c = 123;
    float d = 112.64E3;
    double e = 0.7623e-2;
    float f = 1.23002398;
    printf("a=%e \nb=%f \nc=%lf \nd=%lE \ne=%lf \nf=%f\n", a, b, c, d, e, f);
   
    return 0;
}

輸出結果爲:table

a=3.020000e-01
b=128.100998
c=123.000000
d=1.126400E+05
e=0.007623
f=1.230024

對代碼的說明:

  • %f 和 %lf 默認保留六位小數,不足六位以 0 補齊,超過六位按四捨五入截斷
  • 將整數賦值給 float 變量時會變成小數
  • 以指數形式輸出小數時,輸出結果爲科學計數法;也就是說,尾數部分的取值爲:0 ≤ 尾數 < 10。
  • b的輸出有點讓人不理解,明明初始化的時候,只有三位小數,爲何不能精確輸出呢?這和小數在內存中的存儲形式有關,不少簡單的小數壓根不能精確存儲,因此也就不能精確輸出

另外,小數還有一種更加只能的輸出方式,就是使用%g。 %g會對比小數的十進制形式和指數形式,以最短的方式輸出小數,讓輸出結果更加簡練。所謂最短,就是輸出結果佔用最少的字符。

讀者須要注意的兩點是:

  • %g 默認最多保留六位有效數字,包括整數部分和小數部分;%f 和 %e 默認保留六位小數,只包括小數部分。
  • %g 不會在最後強加 0 來湊夠有效數字的位數,而 %f 和 %e 會在最後強加 0 來湊夠小數部分的位數。

除了 %g,還有 %lg、%G、%lG:

  • %g 和 %lg 分別用來輸出 float 類型和 double 類型,而且當以指數形式輸出時,e小寫。
  • %G 和 %lG 也分別用來輸出 float 類型和 double 類型,只是當以指數形式輸出時,E大寫。
相關文章
相關標籤/搜索