C语⾔printf()函数的格式控制符
C语⾔中,printf()函数针对输出不同的数据类型,有不同的格式控制符,此处汇总了⼀些常⽤的格式控制符:
%hd⽤来输出 short int 类型,hd 是 short decimal 的简写;
%d⽤来输出 int 类型,d 是 decimal 的简写;
%ld⽤来输出 long int 类型,ld 是 long decimal 的简写。
%c:输出⼀个字符。c 是 character 的简写。
%s:输出⼀个字符串。s 是 string 的简写。
%f:输出⼀个⼩数。f 是 float 的简写。
在输出整数⽅⾯,格式控制符和整数的符号是紧密相关的,具体就是:
%d 以⼗进制形式输出有符号数;
%u 以⼗进制形式输出⽆符号数;
%o 以⼋进制形式输出⽆符号数;
%x 以⼗六进制形式输出⽆符号数。
printf函数并不⽀持“输出负的⼋进制或者⼗六进制数”。
下表总结了不同类型的整数,以不同进制的形式输出时对应的格式控制符(--表⽰没有对应的格式控制符)
short int long unsigned short unsigned int unsigned long
⼋进制------%ho%o%lo
⼗进制%hd%d%ld%hu%u%lu
⼗六进制------%hx 或者 %hX%x 或者 %X%lx 或者 %lX
对于⼀个有符号的正数,它的符号位是0,当按照⽆符号数的形式读取时,符号位就变成了数值位,但是该位恰好是0⽽不是1,因此,⽤%o 或者%x输出,不会有影响;
如果⼀个有符号整数是负数,这时候⽤%o或者%x输出,则结果就会⼤相径庭。
可以说,“有符号正数的最⾼位是0”这个巧合才使得%o和%x输出有符号数时不会出错
⼩数的输出格式:
%f 以⼗进制形式输出float类型;
%lf 以⼗进制形式输出double类型;
%e 以指数形式输出float类型,输出结果中的 e ⼩写;
%E 以指数形式输出float类型,输出结果中的 E ⼤写;
%le 以指数形式输出double类型,输出结果中的 e ⼩写;
%lE 以指数形式输出double类型,输出结果中的 E ⼤写。
下⾯有⼀段演⽰代码
#include <stdio.h>
#include <stdlib.h>
int main()
{printf怎么输出字符
float a = 0.302;
float b = 128.101;
double c = 123;
float d = 112.64E3;
double e = 0.7623e-2;
float f = 1.23002398;
printf("a=%e \nb=%f \nc=%lf \nd=%lE \ne=%lf \nf=%f\n", a, b, c, d, e, f);
return 0;
}
输出结果为:
a=3.020000e-01
b=128.100998
c=123.000000
d=1.126400E+05
e=0.007623
f=1.230024
对代码的说明:
%f 和 %lf 默认保留六位⼩数,不⾜六位以 0 补齐,超过六位按四舍五⼊截断
将整数赋值给 float 变量时会变成⼩数
以指数形式输出⼩数时,输出结果为科学计数法;也就是说,尾数部分的取值为:0 ≤ 尾数 < 10。
b的输出有点让⼈不理解,明明初始化的时候,只有三位⼩数,为什么不能精确输出呢?这和⼩数在内存中的存储形式有关,很多简单的⼩数压根不能精确存储,所以也就不能精确输出
另外,⼩数还有⼀种更加只能的输出⽅式,就是使⽤%g。 %g会对⽐⼩数的⼗进制形式和指数形式,以最短的⽅式输出⼩数,让输出结果更加简练。所谓最短,就是输出结果占⽤最少的字符。
读者需要注意的两点是:
%g 默认最多保留六位有效数字,包括整数部分和⼩数部分;%f 和 %e 默认保留六位⼩数,只包括⼩数部分。
%g 不会在最后强加 0 来凑够有效数字的位数,⽽ %f 和 %e 会在最后强加 0 来凑够⼩数部分的位数。
除了 %g,还有 %lg、%G、%lG:
%g 和 %lg 分别⽤来输出 float 类型和 double 类型,并且当以指数形式输出时,e⼩写。
%G 和 %lG 也分别⽤来输出 float 类型和 double 类型,只是当以指数形式输出时,E⼤写。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论