Depoly your flask app into Heroku Fix shit IE code manually ISBN to Book Category by Scraping DangDang A Generic Makefile for C/C++ Program Configure Raspberry pi Remove watermark with PyPDF2 tips for docker Anaconda+TensorFlow+CUDA Snippets Configure Remote Mathematica Kernel Build your own ngrok server Access Array SSL VPN 使用Rstudio制作html5幻灯片 tips for Mac OS X system Tips for ipython notebook 配置Ubuntu server + Openbox (Obuntu) tips for Vimperator tips for Vim 安装CUDA My First Jekyll Blog rsync常见选项 在Linux中读取Ipod touch的文件 tip for texmacs 在VPS上建站的一些tip Gnuplot绘图札记 Samba系统和autofs自动挂载 Linux中alsamixer声卡无法录音 搭建自己的RSS订阅器——Tiny Tiny RSS Grub2引导安装Ubuntu awk tips 将Ubuntu系统装入U盘 The Great Rtorrent 编译GCC 再这样剁手!!!该死的libgd 使用ulimit进行资源限制 使用SSH代理上IPV6 使用RCurl抓取网页数据 修复Ubuntu Grub记 openbox中的文件关联 在Ubuntu 12.04下编译qtiplot 处理BCM4312网卡驱动纪实 配置我的Ubuntu Server记 Cygwin杂记 Linux 使普通用户具有以超级权限执行脚本 让firefox自定义地处理文件类型 WordPress优秀主题及插件 在phpcloud上搭建wordpress UBUNTU下用pptpd做VPN server ubuntu升级内核过后的一些问题 安装telnet服务 kubuntu札记 64位kubuntu札记 统计软件R virtualbox stardict星际译王 Ubuntu重装windows系统后的grub引导修复 SSH服务及花生壳域名解析 采用cbp2make工具由code::blocks工程创建makefile文件 UBUNTU 札记

C/C++ printf函数格式控制符的写法

2013年04月10日

C中printf函数的格式控制符一直不是特别明白。下面翻译一下cplusplus上的解释:

格式控制符主要由下面这几部分构成,中括号内的是可选项。

%[flags][width][.precision][length]specifier

下面依次介绍各个选项的含义。

flags

flags主要是用来控制显示细节的,其选项为:

flags 含义
- 默认右对齐,此选项设置左对齐
+ 即使为正数时仍显示+号
空格 对于一个正数,在前方显示一个空格(负数的话就直接负号,这样更美观)
# 与specifier合用,如#o:显示八进制(首位为0)、#x:十六进制(首位为0x)、#X:十六进制(首位为0X)、#[fFeEgGaA]:即使没有小数位也输出小数点
  输出数字时左边填0直至达到指定宽度

[width][.precision]

width是一个整数数字,表示输出的最小宽度,如果输出数据不够这么长,就以flags指定的方式填充0或空格。width也可以是*,然后具体数值可以通过后面的参数进行动态调整。

precision对不同的类型有不同的含义,同时也可以设置为*通过参数调整。

specifier 含义
整数类型(d, i, o, u, x, X) 最小输出宽度,不够的话在前面填0。若设置precision为0,那么输出0时将不被显示
浮点型(a, A, e, E, f, F) 小数点后的小数位数,默认为6
浮点型(g, G) 有效数字位数
字符串(s) 最长输出的长度,更长的会被截断

[length]specifier

下面这张表是常见数据类型的格式控制符,第一列是length控制符,后面各列是可选用的specifier符。

length specifier
d i u o x X f F e E g G a A c s p n
(none) int unsigned int double int char* void* int*
hh signed char unsigned char signed char*
h short int unsigned short int short int*
l long int unsigned long int wint_t wchar_t* long int*
ll long long int unsigned long long int long long int*
j intmax_t uintmax_t intmax_t*
z size_t size_t size_t*
t ptrdiff_t ptrdiff_t ptrdiff_t*
L long double

某一个数据类型可能有多种specifier,基本上是显示格式的差异,例如浮点类型的e和E分别表示以指数形式(表示指数的E大小写形式)输出数值,又如,g与G表示以指数形式或小数形式中较短的那个来显示数值。