当前位置: 首页 > 互联网, 翻译 > 正文

C语言格式化输出函数:printf

int printf(char *format, arg1, arg2, …);

printf函数把它的参数根据format的形式进行转换,格式化并打印到标准输出。函数返回打印的字符串个数。

格式化字符包括两个对象类型:一种是拷贝到输出流的普通字符,另一种是转换规则,每一个转换规则转换并打印下一个连续的printf参数。每一个转换规则从一个‘%’开始,到转换字符截止。在‘%’和转换字符之间可能会有下列情形:

    • 1.一个负号(-),表示将转换的参数左对奇显示。
    • 2.一个数字,表示设定显示字段的最小宽度。要转换的参数将根据这个最小的宽度显示。可能的情况下,会左边(或是右边,如果是左对齐的话)填补来组成字段的宽度。
    • 3.一个句号,用来区分字段宽度和精度。
    • 4.一个数字,表示精度,决定打印一个字符串时显示的最多字符个数,或是浮点数后小数点后的位数,或是整型数时最小位数。
    • 5.如果将整型(int)打印成短整型(short)用h,或是用l打印成长整型(long)。

转换字符见下表,如果%之后不是转换标识符,这个标志符就没有意义。

 字符 参数类型 显示
 d,i  int;  十进制数
 o  int;  无符号八进制数(没有数字0开始)
 x,X  int;  无符号十六进制数(没有0x或0X开始),用abcedf或者ABCDEF替代10,…,15。
 u  int;  无符号十进制数
 c  int;  单个字符
 s  char *  打印字符串直到’\0’为止,或是打印精度所确定个数的字符。
 f  double;  [-]m.dddddd,d的数目由精度来确定(默认是6个)。
 e,E  double;  [-]m.dddddde+/-xx 或 [-]m.ddddddE+/-xx,d的数量有精度来确定(默认是6个)
 g,G  double;  如果指数小于-4,或大于等于精度时就使用%e或%E,否则使用%f。尾随零或是一个尾随的小数不r打印。
 p  void *;  指针(打印指针地址)
 %  NONE  打印一个’%’号

宽度或是精度还可以由’*’来设定,这种情况下,这个值(必须是整型)会参与下个参数的转换计算。比如:最多打印字符串s中的max个字符,可以写成:

printf(“%.*s”, max, s);

关于字符串精度的一些示例,为了区分清楚,我们在打印“hello, world”时前后加上冒号符,示例供参考:

格式 输出结果
:%s: :hello, world:
:%10s: :hello, world:
:%.10s: :hello, wor:
:%-10s: :hello, world:
:%.15s: :hello, world:
:%-15s: :hello, world   :
:%15.10s: :     hello, wor:
:%-15.10s: :hello, wor     :

 

本文固定链接: http://www.byhard.com/?p=847 | 海纳百川

该日志由 byhard 于2013年01月25日发表在 互联网, 翻译 分类下,
原创文章转载请注明: C语言格式化输出函数:printf | 海纳百川
关键字: ,

C语言格式化输出函数:printf:目前有8 条留言

  1. 如果这篇文章是作者根据自己大脑的记忆写出来的,那我不得不佩服博主,真是太有才了~~~
    我经常自己学一些需要的代码知识,但学过之后就忘。因为把问题解决了,所以就自然而然的忘了。
    浏览下博主的博客,发现博主真是多才多艺,博主的知识面太广了,以后要常来拜访。

    2013-01-26 11:40
    • byhard:

      我也跟你有很大的类似,用过之后也就忘记了,下次用到的时候还要去查。这篇是我照着英文书翻译的文章,这有个好处,扣每个单词的时候,也能仔细去体会这句话的意思。多才不敢当,我对问题还缺少深入的分析,说的太浅显,这也是我今后需要努力的方向。谢谢你的支持。

      2013-01-26 13:43
  2. 地板
    an9:

    不懂这些啊。

    2013-01-26 22:47
    • byhard:

      肯定有其它文章你懂的啦,去看看吧。

      2013-01-27 15:54
  3. 学习啦 C语言学了一个学期还是迷迷糊糊的

    2013-01-27 16:33
    • byhard:

      呵呵,我也学的不好,只是现在在看,平常用不到,所以学习的成果也看不到。有些盲目的。

      2013-01-27 19:18
  4. 沙发
    润初颜:

    这个只能支持一下海兄了!

    2013-01-28 09:45
    • byhard:

      谢谢,这个确实专业,我也是在学习。

      2013-01-28 12:21