printf函数的格式修饰符
本文介紹printf函數(shù)的一些特殊的格式控制修飾符
1、域?qū)捫揎椃?–> 數(shù)字
對所有格式控制符都有效,即便是%%也不例外
寬度修飾符出現(xiàn)在%和格式控制符之間的數(shù)字,使數(shù)據(jù)在固定區(qū)域打印。如果待打印的數(shù)值不能填滿位置,它的左側(cè)會被天上空格以滿足填滿域?qū)拝^(qū)域,這些數(shù)值是右對齊的;如果超過了給定域?qū)?#xff0c;輸出區(qū)域會調(diào)整域?qū)捯郧『媚苋菁{該數(shù)值,而不會把該數(shù)值截斷。
2、精度修飾符 -> ”. + 數(shù)字“
①對于整數(shù)格式項%d、%o、%x和%u,精度修飾符指定了它們打印數(shù)字的最少位數(shù),要是待打印的數(shù)值小于指定位數(shù),那么打印該數(shù)值時會在它的前面補(bǔ)0,以湊足指定的位數(shù);要是到打印的數(shù)值大于指定位數(shù),那么指定無效,打印該數(shù)值的全部位數(shù)。
②對于%e、%E和%f格式控制符,精度修飾符指定了小數(shù)點后應(yīng)該出現(xiàn)的數(shù)字位數(shù),只有當(dāng)精度大于0時,才會出現(xiàn)小數(shù)點。
#include <stdio.h> #include <math.h>int main() {double pi = 4 * atan(1.0);printf("%.0f %.1f %.3f %.10f\n", pi, pi, pi, pi);printf("%.0e %.1e %.3e %.10e\n", pi, pi, pi, pi);printf("%.0E %.1E %.3E %.10E\n", pi, pi, pi, pi);system("pause"); return 0; }③對于%g和%G格式控制符來說,驚呆修飾符指定了打印數(shù)據(jù)中有效數(shù)字的位數(shù),如果小數(shù)點之后沒有數(shù)字,那么小數(shù)點也不會被打印。
#include <stdio.h>int main() {printf("%.1g %.1g %.2g %.3g %.8g\n", 1 / 3.0, 10/3.0, 10 / 3.0, 10 / 3.0, 10 / 3.0);printf("%.1G %.1G %.2G %.3G %.8G\n", 1 / 3.0, 10/3.0, 10 / 3.0, 10 / 3.0, 10 / 3.0);system("pause");return 0; }④用于%s格式控制符,指定要從相應(yīng)的字符串中打印的字符個數(shù)。當(dāng)指定的值小于字符串中字符個數(shù)時,只輸出字符串中的前N個字符(N為精度值),當(dāng)指定的大于字符串中字符個數(shù)時,輸出的字符個數(shù)為字符串中全部字符的個數(shù)。
#include <stdio.h>int main() {int ret1 = 0;int ret2 = 0;int ret3 = 0;ret1 = printf("%.10s\n", "abcdefg");ret2 = printf("%.5s\n", "abcde");ret3 = printf("%.3s\n", "abcdefg");printf("%d %d %d\n", ret1, ret2, ret3); system("pause");return 0; }3、標(biāo)志符
①-
此標(biāo)識符后必須跟有域?qū)挷艜幸饬x,它的作用是使指定了域?qū)挼臄?shù)據(jù)輸出時左對齊。
②+
規(guī)定每個待打印的數(shù)值在輸出時都應(yīng)以它的符號(“+”、“-”)作為第一個字符。
③空白字符(空格)
如果數(shù)值是非負(fù)數(shù),就在它的前面添加一個空格。
PS:要是空白字符修飾符與+修飾符出現(xiàn)在一起,以+修飾符為準(zhǔn)。
④#
%o格式控制符在打印輸出時在數(shù)字的前面加一個0,%x或%X在打印輸出時在數(shù)字的最前面加一個0x或0X。
對浮點數(shù)格式來說,#標(biāo)志符要求小數(shù)必須被打印出來,即使小數(shù)點之后沒有數(shù)字,對于%g和%G來說,不會去掉數(shù)值尾綴的0.
#include <stdio.h> #include <math.h>int main() {printf("%.0f %#.0f %g %#g\n", 3.0, 3.0, 3.0, 3.0);system("pause");return 0; }4、%n
%n與其他格式說明符號不同。不向printf傳遞格式化信息,而是用于指出函數(shù)已經(jīng)打印的字符的個數(shù),這個數(shù)被存儲在對應(yīng)參數(shù)(整型指針)所指向的整數(shù)中。
這兒的&n就是我們存儲字符個數(shù)的整型指針。
PS:是不是趕腳有些像用scanf()給n輸入一個值
5、使用 * 替換域?qū)捇蚓戎?/p>
有時候,因為數(shù)據(jù)的不同,我們可能想使用的域?qū)捇蚓戎狄膊煌?#xff0c;例如,字符數(shù)組里面每次存儲的字符個數(shù)可能是不同的,那么我們想要不管每次給的字符數(shù)是多少,都不用改變printf()函數(shù)格式控制字符串里的域?qū)捄途戎翟撛趺醋瞿亍?
因為數(shù)值的長度在程序中是寫“死”的數(shù)字(magic number),那么可能我們經(jīng)常會這樣來定義數(shù)組
那么為了方便每次打印str里面存儲的字符時不用修改printf()函數(shù)格式控制字符串里的域?qū)捄途戎?#xff0c;我們可能會這樣寫:
printf("%MAXSIZE.MAXSIZEs", str);但是,預(yù)處理器的范圍不能作用到字符串的內(nèi)部,所以這樣是不可能達(dá)到我們的期望的。
而通過一個格式修飾符 * 我們可以很巧妙的做到這一點:
這兒用 * 替換域?qū)捄途戎?#xff0c;使printf()的參數(shù)列表里依次出現(xiàn)代表域?qū)挼膮?shù)和代表精度值的參數(shù),巧妙的避免的預(yù)處理器不能作用于字符串內(nèi)部的問題。
總結(jié)
以上是生活随笔為你收集整理的printf函数的格式修饰符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ruby mysql dbi_Ruby
- 下一篇: Oracle 11g ora 15018