printf()的轉換說明的修飾符中的標記、數字、和.數字

先記下代碼和運行結果測試

再解釋spa

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define PAGES 959
int main(int argc,char* argv)
{
    printf("*%d*\n",PAGES);
    printf("*%+2d*\n",PAGES);
    printf("*%10d*\n",PAGES);
    printf("*%-10d*\n",PAGES);
    printf("*%010d*\n",PAGES);
    printf("*%-010d*\n",PAGES);
    printf("*%-010.2d*\n",PAGES);
    printf("*%-010.5d*\n",PAGES);
    printf("*%010.5d*\n",PAGES);

    const double RENT = 3852.99;
    printf("----------------------------------\n");
    printf("*%f*\n",RENT);
    printf("*%e*\n",RENT);
    printf("*%4.2f*\n",RENT);
    printf("*%3.1f*\n",RENT);
    printf("*%10.3f*\n",RENT);
    printf("*%10.3E*\n",RENT);
    printf("*%+4.2f*\n",RENT);
    printf("*%010.2f*\n",RENT);
    printf("*%-10.2f*\n");


    return 0;
}

 

結果爲:code

*959*
*+959*
* 959*
*959 *
*0000000959*
*959 *
*959 *
*00959 *
* 00959*
----------------------------------
*3852.990000*
*3.852990e+03*
*3852.99*
*3853.0*
* 3852.990*
* 3.853E+03*
*+3852.99*
*0003852.99*
*3852.99 *blog

說明:it

首先這三種修飾符,即標記、數字和.數字,他們必須按照這個順序書寫,不能變換順序io

標記包括5種:+-空格#0class

+:表示顯示符號位變量

-:待打印項左對齊,即待打印的項位於整個字段的最左邊。這裏解釋一下,這裏所說的字段是指整個轉換說明,好比"%-10d",這個字段不只包括%d表示的數字還包含一些空格位,由於整個字段的長度爲10個字符位,若是數字不夠則須要用空格填充,默認狀況是空格填充在左側,可是使用了-符號後,數字要左對齊,就是數字出如今最左側,而後纔是補充的空格。gc

空格:還沒明白,明白了再添加im

#:用於顯示八進制和十六進制的前導符。

0:以0填充。前面說到不足的字符位默認是空格填充,若是使用0標記,則用0填充,固然,0填充只能是在數的前面(左側)填充,要否則數的大小就變啦!因此當使用-標記表示左對齊的時候0表示是沒有做用的。

 

 

數字修飾符:用於表示這個字段(前面已經解釋了字段的含義)所佔的字符位的個數。例如%10d表示這個字段佔10位,若是數字自己不足10位則默認狀況用空格填充(填充在左側),若是數字自己已經超過10位,數字標記就不起做用了

 

.數字修飾符:對於整數,表示整數的最小位數,如%.5d ,若是數字自己的位數小於5位,則會填充0以達到五位數(填充位置天然是數的左側),若是數自己就大於5位,那麼能夠認爲這個標記不起做用。

      對於浮點數,表示的是小數點右邊的數字的位數,默認狀況下浮點數好像會顯示小數點右邊的六位。

 

這三種修飾符一般狀況下會一塊兒使用,分析的時候必定要注意這三個修飾符出現的順序必定是先標記再數字最後是點數字(固然其中一項或多項沒有能夠不使用)。牢記這一點而後再分析就容易了。

 

11月26日添加:

對於標記空格的理解:

先給出代碼:

 

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv)
{

    printf("%d\t%d\t%d\t%d\t%d\t%d\n",32,950,621,-123456789,122);
    printf("%d\t%d\t%d\t%d\t%d\t%d\n",-32,12,-95,22,12,111);
    printf("----------------------------------------------------------------------------------------------------------------------\n\n\n");


    //    添加數字標記使每一個字段佔用的字符位數相同
    printf("%9d\t%9d\t%9d\t%9d\t%9d\t%9d\n",32,950,621,-123456789,122);
    printf("%9d\t%9d\t%9d\t%9d\t%9d\t%9d\n",-32,12,-95,22,12,111);
    printf("----------------------------------------------------------------------------------------------------------------------\n\n\n");


    //添加-標記,使數字做對其
    printf("%-9d\t%-9d\t%-9d\t%-9d\t%-9d\t%-9d\n",32,950,621,-123456789,122);
    printf("%-9d\t%-9d\t%-9d\t%-9d\t%-9d\t%-9d\n",-32,12,-95,22,12,111);
    printf("----------------------------------------------------------------------------------------------------------------------\n\n\n");


    //添加空格標記,使正數前面生成前導空格
    printf("% -9d\t% -9d\t% -9d\t% -9d\t% -9d\t% -9d\n",32,950,621,-123456789,122);
    printf("% -9d\t% -9d\t% -9d\t% -9d\t% -9d\t% -9d\n",-32,12,-95,22,12,111);
    printf("----------------------------------------------------------------------------------------------------------------------\n\n\n");

    //多個空格呢,會當成一個空格來處理
    printf("%  -9d\t%  -9d\t%  -9d\t%  -9d\t%  -9d\t%  -9d\n",32,950,621,-123456789,122);
    printf("%  -9d\t%  -9d\t%  -9d\t%  -9d\t%  -9d\t%  -9d\n",-32,12,-95,22,12,111);
    printf("----------------------------------------------------------------------------------------------------------------------\n\n\n");


    //空格標記和-標記的順序調換一下
    printf("%- 9d\t%- 9d\t%- 9d\t%- 9d\t%- 9d\t%- 9d\n",32,950,621,-123456789,122);
    printf("%- 9d\t%- 9d\t%- 9d\t%- 9d\t%- 9d\t%- 9d\n",-32,12,-95,22,12,111);
    printf("----------------------------------------------------------------------------------------------------------------------\n\n\n");

    return 0;
}

運行結果:

 

說明: 在轉換說明中使用空格標記的做用是:在輸出的正值前面生成前導空格,負值前面不產生前導空格,這樣輸出的結果比較美觀。

打印多行數據的時候,咱們常常使用\t 來控制輸出,使輸出更加美觀。可是當數字的位數大於8的時候,用\t也不能徹底解決(第一種代碼)。這時咱們能夠在轉換說明中加入數字修飾(第二種代碼),來控制每一個字段所佔字符的位數,咱們發現,這種狀況比上一種狀況美觀了不少。可是有時候咱們但願數據左對齊而不是右對齊,這時咱們就能夠在轉換說明中使用-標記(第三種代碼),採用的第三種代碼後,咱們發現,輸出更加美觀了,可是仍然存在一個小的瑕疵,就是正數和負數不能對其,這個時候咱們能夠在轉換說明中再加入空格標記(第四種代碼),使得輸出更加美觀。最後咱們測試了一下使用多個空格做爲標記,發現效果和使用一個空格是同樣的(第五種代碼),也就是說轉換說明中使用空格標記,多個空格都被視爲一個空格。最後咱們還將空格標記和-標記的位置進行了調換(第六種代碼),發現和第五種狀況同樣。說明,在轉換說明中使用標記時,對五種標記的順序沒有要求,可是切記,正如前面一再強調的那樣,標記修飾必定要在數字修飾的前面,數字修飾必定要在.數字修飾的前面。

 

補充:

對於整型變量來講,當0標記和.數字修飾同時使用時,零標記將失去做用。

相關文章
相關標籤/搜索