C语言中printf格式化输出函数
int printf(const char *format,);format 参数输出的格式定义格式为% type规定数据输出方式具体如下1.type 含义如下d 有符号10进制整数i 有符号10进制整数o 有符号8进制整数u 无符号10进制整数x 无符号的16进制数字并以小写abcdef表示X 无符号的16进制数字并以大写ABCDEF表示F/f 浮点数E/e 用科学表示格式的浮点数g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式但表示为指数c 单个字符s 字符串% 显示百分号本身p 显示一个指针near指针表示为XXXXfar 指针表示为XXXXYYYYn 相连参量应是一个指针其中存放已写字符的个数2.flags 规定输出格式取值和含义如下无 右对齐左边填充0和空格- 左对齐右边填充空格 在数字前增加符号 或 -一个空格 只对负数显示符号# 当typec,s,d,i,u时没有影响typeo,x,X时分别在数值前增加0,0x,0Xtypee,E,f时总是使用小数点typeg,G时除了数值为0外总是显示小数点 3.width 用于控制显示数值的宽度取值和含义如下n(n1,2,3...) 宽度至少为n位不够以空格填充0n(n1,2,3...) 宽度至少为n位不够左边以0填充 * 格式列表中下一个参数还是width 4.prec 用于控制小数点后面的位数取值和含义如下无 按缺省精度显示0 当typed,i,o,u,x时没有影响typee,E,f时不显示小数点n(n1,2,3...) 当typee,E,f时表示的最大小数位数type其他表示显示的最大宽度 .*格式列表中下一个参数还是width5.F|N|h|l 表示指针是否是远指针或整数是否是长整数F 远指针n 近指针h短整数或单精度浮点数l 长整数或双精度浮点数1.一般格式printf(格式控制输出表列例如printf(i%d,ch%c/n,i,ch);说明:(1)“格式控制”是用双撇号括起来的字符串也称“转换控制字符串”它包括两种信息①格式说明由“%”和格式字符组成它的作用是将输出的数据转换为指定的格式输出。②普通字符即需要原样输出的字符。2“输出表列”是需要输出的一些数据可以是表达式(3printf函数的一般形式可以表示为printf(参数1参数2……参数n)功能是将参数2参数n按参数1给定的格式输出2.格式字符9种1d或i格式符。用来输出十进制整数有以下几种用法①%d按整型数据的实际长度输出。②%mdm为指定的输出字段的宽度。如果数据的位数小于m则左端补以空格若大于m则按实际位数输出。③%ld(%mld 也可)输出长整型数据。例如long a123456;printf(%ld,a);2o格式符以八进制数形式输出整数。格式%o%mo,%lo%mlo都可。3x(或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/*输出实数时指定小数位数*/8e(或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 ...描述printf 命令转换、格式化并写 Argument 参数到标准输出。Argument 参数是由 Format 参数控制格式化的。格式化输出行不能超出 LINE_MAX 字节长度。下列环境变量影响 printf 命令的执行LANG 在 LC_ALL 和相应的环境变量以 LC_ 开头没有指定语言环境时确定语言环境编目使用的语言环境。LC_ALL 确定用于覆盖由 LANG 或其它任何 LC_ 环境变量设置的任何语言环境编目值的语言环境。LC_CTYPE 确定把文本字节数据顺序解释为字符的语言环境例如单一字节对应多字节字符的参数。LC_MESSAGES 确定写消息使用的语言。LC_NUMERIC 确定数字格式编排的语言环境。此环境变量影响使用 e、E、f、g 和 G 转换字符编写的数字的格式。Format 参数是包含三种对象类型的一个字符串* 无格式字符复制到输出流。* 转换规范每个规范导致在值参数列表中检索 0 个或更多个项。* 以下转义序列。在复制到输出流时这些序列导致它们的相关操作在有此功能的设备上显示// 反斜杠/a 警告/b 退格/f 换页/n 换行/r 回车/t 跳格/v 垂直跳格/ddd ddd 是 1、2 或 3 位八进制数字。这些转义序列作为由八进制数指定的具有数字值的字节显示。Argument 参数是一个或多个字符串的列表它在 Format 参数的控制下被写到标准输出。Format 参数在必要的情况下会经常重新使用以满足 Argument 参数。将好像提供了空字符串 Argument 一样评估任何额外的 c 或者 s 转换规范其它额外转换规范将好像提供了 0 Argument 一样评估。此处 Format 参数不包含转换规范仅出现 Argument 参数结果是不确定的。每个 Format 参数中的转换规范都具有如下顺序的语法1. % 百分号。2. 零或更多的选项修改转换规范的含义。选项字符和它们的含义是- 转换结果在字段中左对齐。 符号转换结果常以符号 或者 -开始。空格 如果符号转换的第一个字符不是符号结果的前缀将是空格。如果空格和 选项字符都显示则忽略空格选项字符。# 此选项指定值转换到备用格式。对于 c、d、i, u 和 s 转换选项没有作用。对于 o 转换它增加精度来强制结果的第一数字是 a、0零。对于 x 和 X 转换非零结果分别具有 0x 或 0X 前缀。对于 e、E、 f、g 和 G 转换结果通常包含基数字符即使基数字符后没有数字。对于 g 和 G 转换结尾零不象通常一样除去。0 对于 d、i、o、 u、x、e、 E、f、g 和 G 转换前导零跟在符号或底数的后面用于填充字段宽度将不用空格填充。如果显示 0零和 -减号选项0零选项被忽略。对于 d、i、o、u、x 和 X 转换如果指定精度0零选项将被忽略。注:其它转换没有定义其行为。3. 可选的指定最小值字段宽度的十进制数字字符串。如果转换值字符少于字段宽度该字段将从左到右按指定的字段宽度填充。如果指定了左边调整选项字段将在右边填充。如果转换结果宽于字段宽度将扩展该字段以包含转换后的结果。不会发生截断。然而小的精度可能导致在右边发生截断。4. 可选的精度。精度是一个 点后跟十进制数字字符串。如果没有给出精度按 0零对待。精度指定* d、o、i、 u、x 或 X 转换的最少数字显示位数。* e 和 f 转换的基数字符后的最少数字显示位数。* g 转换的最大有效数字位数。* s 转换中字符串的最大打印字节数目。5. 指示要应用的转换类型的一个字符例如% 不进行转换。打印一个 %百分号。d, i 接受整数值并将它转换为有符号的十进制符号表示法。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示将使用前导零扩展。缺省精度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度导致用前导零填充字段宽度值。o 接受整数值并将它转换为有符号的八进制符号表示法。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示将使用前导零扩展。缺省精度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度导致用前导零填充字段宽度值。不用八进制值表示字段宽度。u 接受整数值并将它转换为无符号的十进制符号表示法。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示将使用前导零扩展。缺省精度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度导致用前导零填充字段宽度值。x, X 接受整数值并将它转换为十六进制符号表示法。字母 abcdef 用于 x 转换字母 ABCDEF 用于 X 转换。精度指定显示的最小数字位数。如果值转换后可以用更少的位数来表示将使用前导零扩展。缺省精度是 1。精度为零的零值转换的结果是空字符串。用零作为前导字符来指定字段宽度导致用前导零填充字段宽度值。f 接受浮点或者双精度值并将它转换为十进制符号表示法格式为 ddd.ddd。基数字符在这里显示为十进制点后的数字位数等于规定的精度。 LC_NUMERIC 语言环境编目确定在这个格式中使用的基数字符。如果不指定精度则输出六个数字。如果精度是 0零将不显示基数字符。e, E 接受浮点或者双精度值并将它转换为指数表示的形式 d.dde{|-}dd。在基数字符前有一个数字在这里显示为十进制点基数字符后的数字位数等于规定的精度。 LC_NUMERIC 语言环境编目确定在这个格式中使用的基数字符。如果不指定精度则输出六个数字。如果精度是 0零将不显示基数字符。E 转换字符在指数前生成带 E 而不是带 e 的数字。指数通常至少包含两个数字。然而如果要打印的指数值大于两个数字必要时需要打印附加指数数字。g、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三次使用 Format 参数打印所有给定字符串。0零由 printf 命令提供以满足最后的 %4d 转换规格。2. 输入下列命令printf (%c %c/n,78,79);产生下列输出N_O文件/usr/bin/printf 包含 printf 命令。