1、printf()中的標記
1.標記簡介
標記 |
含義 |
- |
待打印項左對齊,即從字段的左側開始打印該項,示例:"-20s" |
+ |
有符號值若爲正,則在值前面顯示加號;若爲負,則在值前面顯示減號,示例:"+6.2f" |
空格 |
有符號值爲正,則在值前面顯示前導空格(不顯示任何符號);若爲負,則在值前面顯示減號+標記覆蓋一個空格,示例" 6.2f" |
# |
把結果轉換爲另外一種形式,若是是%o格式,那麼以0開始;若是是%x或者%X格式,則以0x或者0X開始;對於全部的浮點格式,#保證了即便後面沒有任何數字,也打印一個小數點字符,對於%g或者%G格式,#防止結果後面的0被刪除,示例:"%#o「、」%#8.0f"、"%+#10.3e" |
0 |
對於數值格式,用前導0代替空格填充字段寬度,對於整數格式,若是出現-標記或者指定精度,則忽略該標記,示例:"%010d"和「%0.83f」 |
#include<stdio.h>
#define PAGES 959
int D19_1_width(void) {
printf("*%d*\n", PAGES);
printf("*%2d*\n", PAGES);
printf("*%10d*\n", PAGES);
printf("*%-10d*\n", PAGES);
return 0;
}
#include<stdio.h>
int D19_2_floats(void) {
const double RENT = 3852.99; //const 變量
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);
return 0;
}
- 能夠從上面看出來,只有一個第一個是有疑問的,這種狀況下,字段寬度和小數點後面的位數均是系統默認的配置,即字段寬度是容納待打印數字所須要的位數和小數點後打印6位小數。第二個也是有默認的設置,編譯器在小數點的左側打印1個數字,在小數點的右側打印6個數字。其餘的都在乎料中。
- 嘗試修改RENT值,看一下打印結果
#include<stdio.h>
int D19_3_flags(void) {
printf("%x %X %#x\n", 31, 31, 31);
printf("**%d**% d**\n", 42, 42, -42);
printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);
return 0;
}
- 第一行前兩個是十六進制數,第三個也是,可是會加一個標識符ox
- 第二行知足表格裏的內容
- 第三行前三個好說,第四個若是0標記和精度一塊兒出現,0會被忽略
2、源碼: