printf()的參數格式如下所示
%[flags][width][.precision][size]type
其中,type是必須要有的,而其他四個域是可選的。其中flags域用來控制輸出是否包含正負號、空格、0、小數點和八進制或者十六進制標誌的前綴。flags域中可以包含一個或多個符號來表示指令,這些符號出現的順序是沒有要求的。
1 對齊指令
printf()函數默認是右對齊的,例如
int i = 12;
printf("%6d", i);
其中,printf()函數中的參數“6”表示輸出的長度是6,此時輸出的結果是右對齊的,如圖1所示。
圖1 默認右對齊
在flags域中使用“-”符號使得輸出變爲左對齊,如圖2所示。
printf("%-6d", i);
圖2 對齊方式變爲左對齊
2 輸出正數有“+”
默認情況下,printf()函數只有在處理負數的時候纔會輸出其符號,處理正數時不會輸出符號。可以將flags域設置爲“+”,此時正數時會輸出其符號,如圖3所示。
int i = 12;
printf("%+d", i);
圖3 輸出“+”
3 補0指令
如果指定了輸出結果的寬度,那麼在寬度域前面的flags域中可以指定補0。
printf("%06d", i);
此時會在右對齊輸出i的同時,將輸出的空格位補0,如圖4所示。
圖4 補0
需要注意的是,如果此時flags域中含有“-”,即指定輸出左對齊,則補0指令無效。
printf("%-06d", i);
此時的輸出與圖2相同。
4 輸出空格
當要輸出的是有符號的數字,並且是正數時,可以將flags域設置爲空格,此時的輸出前也相應有空格,如圖5所示。
printf("% d", i);
圖5 空格
當輸出的數字是負數或者flags域中帶有“+”指令時,空格指令無效。
printf("%+d", i);
此時的輸出與圖3輸出相同。
5 #指令
當以八進制或者十六進制的格式輸出指定數字時,即type的類型是“o”、“x”或者“X”時,flags域中的#指令的作用是爲八進制或者十六進制添加前綴,如圖6所示。
printf("%#x", i);
圖6 添加前綴
需要注意的是,當type類型是“X”時,輸出的前綴是“0X”。