C语言格式化输出
1.格式控制符形式
% [{+,-}] [o] [{m,m.n}] [{l,h}] <格式控制符>
其中,中括号[]里的内容是可选的,<>里的内容是必须的。以下对各个标志的含义简要介绍:
%:表示格式控制的起始符号,必不可少。–格式控制起始位置
+/-:表示对齐标志,+表示右对齐,-表示左对其,缺省情况下为右对齐。–对齐标志
o:表示当实际长度没有格式控制的长度大时,用“o”补全。–补全内容
m/m.n:其中,m表示输出所占位宽,n表示实际取标识符的多少位输出–占位长度
l/h:l对整型指long型,对实型指double型;h用于将整型字符修正为short型
<>:格式控制符
1.1格式控制符
%d:用于输出整型数(整型指本质为整型的数,如int、short等)
%c:用于输出一个字符
%s:用于输出一个字符串
%o:以无符号八进制形式输出整数值
%x:以无符号十六进制形式输出整数值
%u:以无符号形式输出十进制数
%f:用来输出浮点数(float),精度为6位小数,第七位四舍五入。
%p:指针的值
1.2占位长度与格式控制符搭配输出
1.2.1 占位长度与%d搭配
%md:m为指定的输出数据的位宽。如果数据的位数小于m,则左端补以空格(因为默认右对齐,所以左补用以占位);如果数据的位数大于m,则以数据的实际位数输出。示例如下:
1.2.2 占位长度与%c搭配
一般无此搭配方式。
1.2.3 占位长度与%s搭配
%ms:m为指定的输出字符串的宽度。如果字符串的位数小于m,则左端补空格;如果字符串的位数大于m,则以实际的字符串长度输出。实例如下:
%m.ns:意为从左向右截取字符串的n位输出到占位m的位置,左补空。设字符串实际长度为len,则具体表现形式如下:
1.若n<len
截取字符串前n个字符,然后做如下判断:
若m<n:则输出n个字符
若m>n:则输出m个字符,左补空
2.若n>len
取字符串的实际(长度len)字符,然后做如下判断:
若m<len:则输出len个字符
若m>len:则输出m个字符,左补空格
1.2.4 占位长度与%f搭配
%m.nf:m为占位宽度,n为小数点右边的位数,浮点数的规则较字符串比起来更为复杂些,你不但要关注浮点数的总占位宽,还要关注小数的占位宽。小数部分的精度为lenDot,下面分整数位数与小数位数简要分析下:
1.2.4.1小数部分:
由于浮点数float的精度为6(即lenDot=6)。算小数部分原则:
(1)首先根据浮点数的实际精度得出近似值,原则为:
若浮点数的实际小数位长大于6,则截取6位,第七位四舍五入;若浮点数的实际小数位数小于6,则后补0。如1.23转换成1.230000;1.23456789转换成1.234568
(2)根据上步中的结果值,从中截取n位长。注意:n一般小于或等于6,因为超过6位的数据不真实。
1.2.4.2整数部分:
整数部分完整输出,唯一要注意的是:
当m>(整数位宽+小数点位宽+n)时,左补空。
1.2.4.3示例如下:
1.2.4.4建议
一般不对浮点数float输出大于6位的小数,因为大于6位后的数据已经在浮点精度之外了,是不正确的数据。
1.3补全内容与占位长度、控制符的搭配输出
当标识符的占位长度大于实际的长度时,在多出的位置处用补全内容填充。补全内容默认为空,可以显式指定补全内容为0。实例如下:
1.4对齐标志
对齐标志有两种:+和-,其中缺省为+。+表示右对齐,-表示左对齐。对齐标志要相对简单、更好理解,所以不细讲,直接举例验证,如下:
左对齐:
右对齐: