3.2.2 printf函数中常用的格式说明
格式控制中,每个格式说明都必须用“%”开头,以一个格式字符作为结束,在此之间可以根据需要插入“宽度说明”、左对齐符号“-”、前导零符号“0"等。
1.格式字符
%后允许使用的格式字符和它们的功能如表3.1所示。在某些系统中,可能不允许使用大写字母的格式字符,因此为了使程序具有通用性,在写程序时应尽量不用大写字母的格式字符。
1.格式字符
%后允许使用的格式字符和它们的功能如表3.1所示。在某些系统中,可能不允许使用大写字母的格式字符,因此为了使程序具有通用性,在写程序时应尽量不用大写字母的格式字符。
2.长度修饰符
在%和格式字符之间,可以加入长度修饰符,以保证数据输出格式的正确和对齐。对于长整型数(long)应该加l,即%ld;对于短整型数(short)可以加h,即%hd。
在%和格式字符之间,可以加入长度修饰符,以保证数据输出格式的正确和对齐。对于长整型数(long)应该加l,即%ld;对于短整型数(short)可以加h,即%hd。
字符串长度不足补空格3.输出数据所占的宽度说明
当使用%d,%c,%f,%e,%s,…的格式说明时,输出数据所占的宽度(域宽)由系统决定,通常按照数据本身的实际宽度输出,前后不加空格,并采用右对齐的形式。也可以用以下三种方法人为控制输出数据所占的宽度(域宽),按照使用者的意愿进行输出。
(1)在%和格式字符之间插入一个整数常数来指定输出的宽度n(例如%4d,n代表整数4)。如果指定的宽度n不够,输出时将会自动突破,保证数据完整输出。如果指定的宽度n超过输出数据的实际宽度,输出时将会右对齐,左边补以空格,达到指定的宽度。
(2)对于float和double类型的实数,可以用“n1.n2”的形式来指定输出宽度(n1和n2分别代表一个整常数),其中n1指定输出数据的宽度(包括小数点),n2指定小数点后小数位的位数,n2也称为精度(例如%12.4f,n1代表整数12 ,n2代表整数4)。
对于f,e或E,当输出数据的小数位多于n2位时,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理;当输出数据的小数位少于n2时,在小数的最右边补0,使得输出数
当使用%d,%c,%f,%e,%s,…的格式说明时,输出数据所占的宽度(域宽)由系统决定,通常按照数据本身的实际宽度输出,前后不加空格,并采用右对齐的形式。也可以用以下三种方法人为控制输出数据所占的宽度(域宽),按照使用者的意愿进行输出。
(1)在%和格式字符之间插入一个整数常数来指定输出的宽度n(例如%4d,n代表整数4)。如果指定的宽度n不够,输出时将会自动突破,保证数据完整输出。如果指定的宽度n超过输出数据的实际宽度,输出时将会右对齐,左边补以空格,达到指定的宽度。
(2)对于float和double类型的实数,可以用“n1.n2”的形式来指定输出宽度(n1和n2分别代表一个整常数),其中n1指定输出数据的宽度(包括小数点),n2指定小数点后小数位的位数,n2也称为精度(例如%12.4f,n1代表整数12 ,n2代表整数4)。
对于f,e或E,当输出数据的小数位多于n2位时,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理;当输出数据的小数位少于n2时,在小数的最右边补0,使得输出数
据的小数部分宽度为n2。若给出的总宽度n1小于n2加上整数位数和小数点(e或E格式还要加上指数的5位),则自动突破n1的限制;反之,数字右对齐,左边补空格。
也可以用“.n2”格式(例如%.6f),不指定总宽度,仅指定小数部分的输出位数,由系统自动突破,按照实际宽度输出。如果指定“n1.0”或“.0”格式(例如%12.0f或%.0f),则不输出小数点和小数部分。
对于g或G,宽度用来指定输出的有效数字位数。若宽度超过数字的有效数字位数,则左边自动补0;若宽度不足,则自动突破。不指定宽度,将自动按照b位有效数字输出,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理。
(3)对于整型数,若输出格式是“0n1”或“.n2”格式(例如%05d或%.5d},则如果指定的宽度超过输出数据的实际宽度,输出时将会右对齐,左边补0。
对于float和double类型的实数,若用“0n1”或“n2”格式输出(例如%012.4f),如果给出的总宽度n1大于n2加上整数位数和小数点(e或E格式还要加上指数的5位),则数字右对齐,左边补0。
对于字符串,格式“n1”指定字符串的输出宽度,若n1小于字符串的实际长度,则自动突破,输出整个字符串;若n1大于字符串的实际长度,则右对齐,左边补空格。若用“.n2”格式
也可以用“.n2”格式(例如%.6f),不指定总宽度,仅指定小数部分的输出位数,由系统自动突破,按照实际宽度输出。如果指定“n1.0”或“.0”格式(例如%12.0f或%.0f),则不输出小数点和小数部分。
对于g或G,宽度用来指定输出的有效数字位数。若宽度超过数字的有效数字位数,则左边自动补0;若宽度不足,则自动突破。不指定宽度,将自动按照b位有效数字输出,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理。
(3)对于整型数,若输出格式是“0n1”或“.n2”格式(例如%05d或%.5d},则如果指定的宽度超过输出数据的实际宽度,输出时将会右对齐,左边补0。
对于float和double类型的实数,若用“0n1”或“n2”格式输出(例如%012.4f),如果给出的总宽度n1大于n2加上整数位数和小数点(e或E格式还要加上指数的5位),则数字右对齐,左边补0。
对于字符串,格式“n1”指定字符串的输出宽度,若n1小于字符串的实际长度,则自动突破,输出整个字符串;若n1大于字符串的实际长度,则右对齐,左边补空格。若用“.n2”格式
指定字符串的输出宽度,则若n2小于字符串的实际长度,将只输出字符串的前n2个字符。
注意:输出数据的实际精度并不完全取决于格式控制中的域宽和小数的域宽,而是取决于数据在计算机内的存储精度。通常系统只能保证float类型有7位有效数字,double类型有15位有效数字。若你指定的域宽和小数的域宽超过相应类型数据的有效数字,输出的多余数字是没有意义的,只是系统用来填充域宽而已。
注意:输出数据的实际精度并不完全取决于格式控制中的域宽和小数的域宽,而是取决于数据在计算机内的存储精度。通常系统只能保证float类型有7位有效数字,double类型有15位有效数字。若你指定的域宽和小数的域宽超过相应类型数据的有效数字,输出的多余数字是没有意义的,只是系统用来填充域宽而已。
4.输出数据左对齐
通常输出数据都隐含右对齐,如果想左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现。
5.使输出数据总带+号或-号
通常输出的数据如果是负数,前面有符号“-”,但正数前面的“+”一般都省略了。如果要每一个数前面都带正负号,可以在“%”和格式字符间加一个“+”号来实现。
表3.2列举了各种输出宽度和不指定宽度情况下的输出结果(表中输出结果中时符号j代表一个空格),其中k为int型,值为1234;f为float型,值为123.456。
通常输出数据都隐含右对齐,如果想左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现。
5.使输出数据总带+号或-号
通常输出的数据如果是负数,前面有符号“-”,但正数前面的“+”一般都省略了。如果要每一个数前面都带正负号,可以在“%”和格式字符间加一个“+”号来实现。
表3.2列举了各种输出宽度和不指定宽度情况下的输出结果(表中输出结果中时符号j代表一个空格),其中k为int型,值为1234;f为float型,值为123.456。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论