C语言printf输出格式:%d %f %s等用法详解

张开发
2026/4/12 5:00:52 15 分钟阅读

分享文章

C语言printf输出格式:%d %f %s等用法详解
整型的printf函数其参数为指向字符型常量指针的格式字符串。format 参数输出的格式定义格式为% type规定数据输出方式具体如下1.type 含义如下d 有符号10进制整数i 有符号10进制整数o 有符号8进制整数u 无符号10进制整数x 无符号的16进制数字并以小写abcdef表示X 无符号的16进制数字并以大写ABCDEF表示F/f 浮点数E/e 用科学表示格式的浮点数对于将浮点数以特定格式表示使用最短的总的位数以%f和%e表示下的形式来呈现G同g格式却是以指数形式来进行表示。c 单个字符s 字符串% 显示百分号本身p 显示一个指针near指针表示为XXXXfar 指针表示为XXXXYYYYn 相连参量应是一个指针其中存放已写字符的个数2.flags 规定输出格式取值和含义如下无 右对齐左边填充0和空格- 左对齐右边填充空格 在数字前增加符号 或 -一个空格 只对负数显示符号# 当typec,s,d,i,u时没有影响当type等于o 则在数值前面添加 0 当type等于x 那么在数值前面增添0x 当type等于X 要在数值前面加上0X。typee,E,f时总是使用小数点当type等于g、G的时候除了数值是0的情况之外总是会显示小数点。3.width用来控制显示数值的宽度其取值以及含义如下n其中n等于1、2、3等等宽度最少为n位要是不够则用空格来填充。当n取值为1、2、3等等时0n的宽度至少是n位数若位数不足则在左边用0进行填充形成*格。在式列表当中接下来的那个参数依旧是width 4.prec被用来对小数点后面的位数予以控制其取值以及含义是这样的无 按缺省精度显示0 当typed,i,o,u,x时没有影响typee,E,f时不显示小数点当n取值为1、2、3等时对于type等于e、E、f的情况所表示的最大小数位数。type其他表示显示的最大宽度 .*格式列表中下一个参数还是width5.F|N|h|l 表示指针是否是远指针或整数是否是长整数F 远指针n 近指针h短整数或单精度浮点数l 长整数或双精度浮点数1.一般格式printf(格式控制输出表列说明:(1)用双撇号括起来的字符串被称作“转换控制字符串”它涵盖两种信息此即“格式控制”。①格式说明由“%”以及格式字符构成其作用在于把输出的数据转变为指定的格式来输出。②普通字符即需要原样输出的字符。2“输出表列”是需要输出的一些数据可以是表达式(3printf函数的一般形式可以表示为printf(参数1参数2……参数n)功能是将参数2参数n按参数1给定的格式输出2.格式字符9种1d或i格式符。用来输出十进制整数有以下几种用法①%d按整型数据的实际长度输出。有这样一种情况②%md其中m代表的是指定的输出字段的宽度要是数据的位数比m小那么就在左端补充上空格要是这个数据的位数大于m那就按照实际的位数进行输出。③%ld(%mld 也可)输出长整型数据。例如long a123456;printf(%ld,a);2o格式符用于将整数以八进制数的形式进行输出。其格式包括%o%mo%lo%mlo均可适用于此。3对于x或者X格式符它是用来以十六进制数的形式去输出整数的有这样几种格式分别是%x %mx %lx %mlx这几种类型都可行。(4)u格式符它是用来输出unsigned型数据的也就是无符号数是以十进制数形式进行输出的。其格式有多种比如%u%mu%lu这些都是可行的。参见:li4-3.c/*无符号数据的输出*/(5)c格式符用来输出一个字符。格式%c%mc都可。(6)s格式符被用于输出一个字符串其格式有%s、%ms、%-ms、%m.ns以及%-m.ns这些都是可行的。参见li4-5.c /*字符串的输出*/7f格式符用于输出实数涵盖单、双精度以小数形态输出其包括的格式有%f%m.nf%-m.nf全部可行。注意单精度实数的有效位数一般为7位双精度为16位。参见li4-6.c/*输出单精度实数时的有效位数*/li4-7.c/*输出双精度实数时的有效位数*/li4-8.c/*输出实数时指定小数位数*/8当使用e或者E格式符之时是要以指数形式去输出实数的其格式包含了%e%m.ne%-m.ne这几种情况且都是可行的。(9)g或者G格式符号用于输出实数它依据数值的大小情况自动挑选f格式或者e格式也就是选择输出时占据宽度比较小的那一种格式。3.说明1其他格式字符除了X、E、G这种要用大写字母表示的情况外必须得用小写字母。2“格式控制”字符串内可以包含转义字符3要是打算输出字符“%”那么就得在“格式控制”字符串里用接连的两个%来呈现就像这样printf(%f%%,1.0/3);4格式字符表参见下表表4.1 printf格式字符格式字符 说 明d,i 以带符号的十进制形式输出整数正数不输出符号o 以八进制无符号形式输出整数不输出前导符0x,X 输出整数时采用十六进制无符号形式并且不输出前导符0x若用x那么输出十六进制数的af时以小写形式呈现若用 X那么则以大写字母输出。u 以无符号十进制形式输出整数c 以字符形式输出只输出一个字符s 输出字符串f 以小数形式输出单、双精度数隐含输出6位小数e,E 以指数形式输出实数将 g、G 依照能够输出宽度较短的一种格式从 %f 或 %e 任选其一进行选用不得输出没有意义的 0。表4.2 printf的附加格式说明字符字符说明字母l用于长整型整数可加在格式符d、o、x、u前面m(代表一个正整数)数据最小宽度n(代表一个正整数)对实数表示输出n位小数对字符串表示截取的字符个数输出的数字或字符在域内向左靠程序例:#includeint main()printf(Hello,world/n);while(1);#includeint main()int i 1, j 2;printf(%d %d/n,i,j);while(1);printf 命令用途写格式化输出。语法printf FormatArgument ...描述将 Argument 参数通过 printf 命令把它转换、格式化后写到标准输出Argument 参数的格式化是由 Format 参数进行控制的格式化输出行的字节长度不能超出 LINE_MAX。下列环境变量影响 printf 命令的执行LC_ALL以及相应的以LC_开头的环境变量若未指定语言环境此时LANG会确定语言环境编目所使用的语言环境。1. LC_ALL确定语言环境。2. 该语言环境用于覆盖编目值。3. 此编目值由LANG或其它任何LC_环境变量设置。4. 且该编目值属于语言环境。LC_CTYPE它确定那种将文本字节数据顺序解释成字符的语言环境比如说存在这样一种情况即涉及单一字节对应多字节字符的参数。LC_MESSAGES 确定写消息使用的语言。用于确定数字格式编排的语言环境的是 LC_NUMERIC此环境变量会对使用 e、E、f、g 和 G 转换字符编写的数字的格式产生影响。Format 参数是包含三种对象类型的一个字符串* 无格式字符复制到输出流。* 实施转换规范经由每种规范致使于值参数列表里开展检索检索出零个或者多于零个的项。以下转义序列于复制至输出流之际这些序列致使它们的相应操作在具备该功能的设备上得以显示。// 反斜杠/a 警告/b 退格/f 换页/n 换行/r 回车/t 跳格/v 垂直跳格dddddd属于1位、2位或者3位的八进制数字这些转义序列呈现为由八进制数所指定的具备数字值的字节了。一个或多个字符串的列表被称作Argument参数它在Format参数的操控之下被写入到标准输出。在必要情形下Format参数会时常重新予以使用以此来满足Argument参数会将任何额外的c或者s转换规范当作好像提供了空字符串Argument那样去评估而其它额外的转换规范则会当作好像提供了0 Argument那样去评估在此处仅仅有Argument参数出现、Format参数不含有转换规范这一结果是不确定的。每个 Format 参数中的转换规范都具有如下顺序的语法1. % 百分号。2. 零个或者更多的选项对转换规范的含义予以修改。选项字符以及它们所具有的含义是- 转换结果在字段中左对齐。 符号转换结果常以符号 或者 -开始。要是将符号进行转换时首个字符并非是符号那么得出的结果其前缀就要是空格。倘若空格以及 选项字符都予以显示那将会忽略空格选项字符。# 此选项将指定值转换为备用格式对于c、d、i、u和s转换该选项不起任何作用对于o转换它通过增加精度来强制结果的首个数字为a、0零对于x和X转换非零结果分别带有0x或0X前缀对于e、E、f、g和G转换结果通常包含基数字符即便基数字符后面没有数字对于g和G转换结尾零不像通常那样被除去。首先对于d、i、o、u、x、e、E、f、g和G的转换存在这样的情况即前导零此零跟在符号或者底数的后面其作用是用于填充字段宽度并且不会用空格来进行填充。接着如果显示0零和 -减号选项那么0零选项会被忽略掉。最后对于d、i、o、u、x和X的转换要是指定了精度0零选项同样会被忽略。注:其它转换没有定义其行为。3. 可选择的用于指定最小值那个字段宽度的十进制数字所构成的字符串。要是转换值字符小于字段宽度那么该字段会从左到右依照指定的字段宽度去填充。要是指定了左边调整选项即这个字段将会在右边填充此对象。要是转换结果宽于字段宽度那就会扩展该字段以此来包含转换后的结果。不会出现截断的情况。然而小的精度有可能致使在右边发生截断现象。4. 存在着可供选择的精度该精度呈现为一个一个跟随着十进制数字字符串的点要是没有给出精度那就按照零来进行对待对于精度的指定有着特定的要求。* d、o、i、 u、x 或 X 转换的最少数字显示位数。* e 和 f 转换的基数字符后的最少数字显示位数。* g 转换的最大有效数字位数。* s 转换中字符串的最大打印字节数目。5. 指示要应用的转换类型的一个字符例如% 不进行转换。打印一个 %百分号。di接收整数值将其转换为有符号的十进制符号表示法精度指定显示的最小数字位数若值转换后能用更少位数表示会进行前导零扩展缺省精度为1精度为零的零值转换结果为空字符串用零作前导字符指定字段宽度会使字段宽度值用前导零填充。接收整数值将其转化为有符号的八进制符号表示形式精度用以指定显示的最少数字位数要是值转换后能够用更少数位来呈现那就采用前导零扩展缺省精度是1精度为零的零值转换后的结果是个空字符串用零当作前导字符去指定字段宽度致使使用前导零来填充字段宽度值不要用八进制值表示字段宽度。u接收整数值将其转换为无符号的十进制符号表示法精度指定显示的最小数字位数若值转换后能用更少位数表示便使用前导零扩展缺省精度是1精度为零的零值转换结果是空字符串用零作为前导字符指定字段宽度致使使用前导零填充字段宽度值。x和X接收整数值接着把它转成十六进制符号表示法。对于x转换用字母abcdef。对于X转换使用字母ABCDEF。精度可明确显示的最小数字位数。要是值转换后能用更少位数来表示那就会用前导零扩展。缺省精度是1。精度为零的零值转换的结果是个空字符串采用零作为前导字符来指定字段宽度这会致使字段宽度值用前导零填充。关于f它会接受浮点或者双精度值接着把该值转换为十进制符号表示法其格式是ddd.ddd这里就会出现一个情况基数字符也就是在格式里显示为十进制点的那个字符它后面的数字位数实际上是等于规定的精度的而LC_NUMERIC语言环境编目它所起到的作用是确定在这个格式中使用的基数字符。至于具体场景当中呢如果是不指定精度这种情况那么输出的就是六个数字。要是精度是0零那么基数字符将不会显示。e,E会接受浮点类型、双精度值进而将其转化为指数表示形式即d.dde{|-}dd。在基数字符之前存在一个数字此处呈十进制点基数字符之后的数字位数等同于规定精度。LC_NUMERIC语言环境的编目用于确定此格式中所使用的基数字符。要是不指定精度那么输出将是六个数字。若精度为0零则不会显示基数字符。E转换字符会在指数前生成带有E而非e的数字。指数通常至少含有两个数字。要是打印的指数值比两个数字大那么在必要的情况下要有附加指数数字被打印出来然而。g、它接受浮点以及双精度值将其转换为 f 或者 e 转换字符式样在 G 转换情形下是 E通过 精度来指定有效数字的数量尾零会从结果里被除去基数字符只有在其后面跟着数字的时候才进行显示所使用的样式是依据转换的值来确定的样式 g 仅仅在转换的指数结果小于 -4或者大于或等于精度时才会被使用。c 接受值将其作为字符串并打印字符串中的第一个字符。s接受值把它当作字符串打印字符串里的字符一直到字符串结束或者达到精度所指示的字符个数。要是没有指定精度那就打印全部字符直到出现第一个空字符。将b接受的值当作字符串此字符串有可能含有反斜杠转义序列。从转换后的字符串开始打印字节一直打印到字符串结束或者达到精度规范所指示的字节数量时停止。要是没有指定精度那就一直打印全部字节一直到有第一个空字符出现的时候为止。支持下列反斜杠转义序列位于 Format 参数描述下的是先前罗列出来的反斜杠转义序列。这些转义序列会被转变为它们所代表的单个字符。/c反斜杠 c序列它不会显示会让 printf 命令忽略 Format 参数里字符串参数所含的其余全部字符串还有所有剩余的字符串参数以及所有附加字符。退出状态该命令返回以下出口值0 成功完成。0 发生错误。示例1. 输入下列命令printf (%5d%4d/n,1213,43);产生下列输出_1213_ _43三次运用Formatter参数去打印全部给定的字符串零是由printf命令供给的用以适配最后的百分之四d转换规格。2. 输入下列命令printf (%c %c/n,78,79);产生下列输出N_O文件/usr/bin/printf 包含 printf 命令。

更多文章