C格式化輸出入整理

printf格式化輸出

"%c" 字元
"%d"和"%i" 有號整數
"%u" 無號整數
"%o" 8進位的無號整數
"%#o" 8進位的無號整數,前面會帶0
"%x" 16進位的無號整數
"%#x" 小寫16進位的無號整數,前面會帶0x
"%#X"  大寫16進位的無號整數,前面會帶0x
"%p" 印出(void*)指標位址

"%f" float浮點數,若為科學表示法會用小寫顯示
"%F" float浮點數,若為科學表示法會用大寫顯示
"%e" float浮點數,以科學表示法會用小寫顯示
"%E" float浮點數,以科學表示法會用大寫顯示
"%g" double浮點數,若為科學表示法會用小寫顯示
"%#g" double浮點數,若為科學表示法會用小寫顯示,並且尾數為0時依然會顯示0
"%G" double浮點數,若為科學表示法會用大寫顯示
"%#G" double浮點數,若為科學表示法會用大寫顯示,並且尾數為0時依然會顯示0

符點數相關

"%10.3f" 輸出float符點數,預設為10個字元寬度,小數點下保留三位
"%10.3f" 輸出float符點數,預設為10個字元寬度

浮點數實測結果如下:

$ printf "%#g\n" 0.0000011
1.10000e-06
$ printf "%g\n" 0.0000011
1.1e-06
$ printf "%#G\n" 0.0000011
1.10000E-06
$ printf "%G\n" 0.0000011
1.1E-06
$ printf "%10.3f\n"  0.0011
     0.001
$ printf "%10.3f\n"  0.00011
     0.000

字串相關

"%s" C式字串
"%.*s" 指定長度的C式字串,  需要兩個參數, 第一個是要印的字串長度, 第二個是要印的字串位址
"%ls" C式寬字串
"%n" 讀取數目

scanf輸入時候使用

"%c" 輸入一個字元, 注意在Windows的Enter有兩個字元
"%s" 輸入一個以white space結尾的字串
"%4.8s" 輸入一個最短為4 最長為8的字串
"%[vf]" 讀取得內容符合字元v或f, 不會讀入內容到變數中
"%[^\n]" 輸入字串直到\n前為止,^表示是不包括的字元
"%*c" 讀取一個字元, 星號表示不會讀入內容到變數中

參考資料

http://en.cppreference.com/w/cpp/io/c/fprintf
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/format.html
https://www.doc.ic.ac.uk/~eedwards/compsys/float/
http://floating-point-gui.de/basic/
https://www.h-schmidt.net/FloatConverter/IEEE754.html
https://sourceware.org/ml/newlib/2008/msg00499.html
http://stackoverflow.com/questions/11542010/c-in-scanf-what-does-it-mean

留言