方法:输入打印(const char * format,[argument] );
格式参数输出的格式。 定义格式如下。
% [ flags ] [ width ] [.PERC ] [ f|n|h|l ] type
规定了数据输出方式,具体如下。
1.type的含义如下。
d带符号十进制整数
I带符号的十进制整数
o带符号的八进制整数
无u形符号十进制整数
无x符号的十六进制数。 用小写的abcdef表示
无x符号的十六进制数字,用大写的ABCDEF表示
F/f浮点数
E/e是科学表达的浮点数
g使用%f和%e表示法中总位数最短的一个,以表示浮点数g与g的格式相同,但它是指数
c的单一字符
s字符串
显示百分比符号本身
p会显示指针。 near指针显示为XXXX
far指针表示为XXXX:YYYY
n连接参数必须是存储已写入字符个数的指针
2.flags规定了输出格式,取值和含义如下。
无右对齐,向左填0和空格
-左对齐,右填空格
在数字前添加符号-
一个空格中只显示负数的符号
type=c,s,d,I,u时没有影响
type=o、x、x时,分别在数值之前添加'0'、'0x '、'0x '
如果type=e、e和f,则始终使用小数点
type=g,g时,除了数值为0外,总是显示小数点3。 3.width用于控制显示的数字的宽度。 取值和意义的n (n=1,2,3…)宽度至少是n位,不足以用空格填充
0 n (n=1,2,3 . )宽度至少为n位,不足以用0填充左边的*格
在表达式列表中,以下参数用于控制width 4.prec中的小数位数,其值和含义如下:
未以默认精度显示
type=d,I,o,u,x时,没有影响
如果type=e、e和f,则不显示小数点
n(n=1、2、3 . ) type=e、e、f时显示的最大大小位数
type=其他表示显示的最大宽度. *
在格式列表中,以下参数保持为width
5.F|N|h|l表示指针是远程指针还是整数长整数
f远指针
n接近指针
短整数或单精度浮点数
l长整数或双精度浮点数
1 .一般格式
printf (格式控制,输出表列) ) )。
示例: printf(I=%d,ch=%c/n ),I,ch );
说明:
)1)“格式控制”是用双撇号括起来的字符串,也称为“转换控制字符串”,包含以下两个信息:
格式说明:由“%”和格式字符组成,用于将输出的数据转换为指定的格式并输出。
普通文字,也就是需要直接输出的文字。
)2)“输出表列”是要输出的数据的一部分,也可以是公式
)3) printf函数的一般形式可以表示如下
printf (参数1,参数2,…,参数n ) ) ) ) ) ) )。
功能是以参数1给出的格式输出参数2~参数n
2 .格式文字(9种)。
(1) d )或I )格式符号。 用于输出十进制整数,用法如下。
%d,按整数数据的实际长度输出。
%md,m是指定输出字段的宽度。 数据位数小于m时,在左端填补空格,大于m时,以实际位数输出。
% LD (也可以是% mld ),输出长数据。
例如,long a=123456;
printf('%LD ',a );
)2) o格式化器,以八进制输出整数。 格式: %o、%mo、%lo、%mlo都可以。
)3) x )或x )格式符号。 以十六进制输出整数。 格式: %x、%mx、%lx、%mlx都可以。
4 )用于输出无符号数字的无符号数据的u格式符号。 以十进制格式输出。 格式: %u、%mu、%lu都可以。
:li4-3.c/*无符号数据的输出*/
)5)用于输出一个字符的c格式符号。 格式: %c,%mc都可以。
(6)用于输出字符串的s格式符号。 格式: %s、%ms、%-ms、%m.ns、%-m.ns都可以。
“li4-5.c /*字符串输出*/
(7)实数)用于输出(包括单精度、双精度)并以小数输出的f格式符号。 格式: %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 以八进制无符号形式输出整数(不输出前导符0)
x,X 以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出,用X时,则以大写字母输出
u 以无符号十进制形式输出整数
c 以字符形式输出,只输出一个字符
s 输出字符串
f 以小数形式输出单、双精度数,隐含输出6位小数
e,E 以指数形式输出实数
g,G 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0
表4.2 printf的附加格式说明字符
字符
说明
字母l
用于长整型整数,可加在格式符d、o、x、u前面
m(代表一个正整数)
数据最小宽度
n(代表一个正整数)
对实数,表示输出n位小数;对字符串,表示截取的字符个数
-
输出的数字或字符在域内向左靠
程序例:#include <stdio.h>
int main()
{
printf("Hello,world/n");
while(1);
}
#include<stdio.h>
int main()
{
int i = 1, j =2;
printf("%d %d/n",i,j);
while(1);
}
printf 命令用途
写格式化输出。
语法
printf Format [ Argument ... ]
描述
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/xqd/printf 包含 printf 命令。