printf

来自cppreference.com
< cpp | io | c
跳转到: 导航, 搜索

语法:

    #include <cstdio>
    int printf( const char *format, ... );

printf函数根据format和其它传递给printf的参数打印输出到stdout。字符串format由两种类型的项组成: 将被打印到屏幕上的字符串,和定义其它传递给printf的参数怎样被显示的格式化命令。基本上,你定义的格式化字符串拥有文本,还有特殊的字符映射到printf的其它参数。例如,这段代码

     char name[20] = "Bob";
     int age = 21;
     printf( "Hello %s, you are %d years old\n", name, age );

显示以下输出:

     Hello Bob, you are 21 years old

%s表示“插入第一个参数,字符串,就在这”。 %d表示第二个参数(一个整型)将被放在这里。

printf的返回值是打印字符的数目,如果发生错误返回一个负值。

[编辑] 格式码

这里有不同的%-格式码代表不同的变量类型,还有选项限制变量和其它东西(whatnot)的长度。


格式
%c 字符
%d 带符号整型
%i 带符号整型
%I64d long long (8B整型), MS-标准
%I64u 无符号long long (8B整型), MS-标准
%e 科学计数,带一小写的"e"
%E 科学计数,带一大写的"E"
%f 浮点型
%g 使用%e或者%f, 它们更短
%G 使用%E或者%f, 它们更短
%o 八进制
%s 字符串
%u 无符号整型
%x 无符号十六进制数,使用小写字母
%X 无符号十六进制数,使用大写字母
%p 指针
%n 参数应该是一个整型指针,放置着到目前位置写入字符的数目

[编辑] 格式修饰符

放置在%符号哦和格式化命令之间的的整数作为最小字段标示符,将会在输出中填补空格或者零来确保足够长。如果你希望填补0,在最小字段宽度修饰符的前面放置一个零:

     %012d

你可以同样将最小字段宽度放置在一个整型变量中,如果你放置*符号而不是一个数字:

     int width = 12;
     int age = 100;
     printf("%*d", width, age);

你同样可以包含精度修饰符,以.N的形式而N是一些数,在格式化命令之前:

     %012.4d

精度修饰符更具不同的格式化命令有不同的意思:

  • %e, %E, 和 %f一起, 精度修饰符让你确定小数位数。例如, %12.6f将会展示一个浮点数至少有12数位宽,带小数点后6位。
  • %g%G一起, 精度修饰符决定显示的有效数字的最大值。
  • %s一起, 精度修饰符仅简单的作为最大字段长度, to complement the minimum field length that precedes the period.

与字段宽度修饰符,你可以通过使用 * 符号来用一个整型变量定义精度修饰符:

     const char* msg = "Hello printf";
     int string_size = strlen (msg);
     printf("msg: %.*s", string_size, msg);

所有的printf输出都是右对齐的,除非你在 % 符号邮右边放置一个减号。例如,

     %-12.4f

将会显示一个显示一个浮点数拥有最少12字符,小数点后4位,并且是左对齐的。

你可以使用字符lh修饰%d, %i, %o, %u, 和 %x 类型修饰符来表示longshort 数据类型(例如,%hd表示短整型)。

类型修饰符 %e, %f, 和 %g 可以使用置前l字符来指示双精度。 类型修饰符 %g, %f, 和 %e 可以在前面放置一个#字符来确保小数点会被显示,即使小数点后没有数。

%x类型修饰符一起使用#字符表示十六进制数将会打印一个0x前缀。

%o类型修饰符一起使用#字符表示八进制数显示时将会带一个0前缀。

在类型修饰符前插入一个正号+将会强制正值前加一个+号。放置一个空格符 ' ' 将会强制正值前由一个空格符引导。

你同样可以在输出字符串中包含 constant escape sequences

相关主题: fprintf, puts, scanf, sprintf

个人工具
名字空间
操作
导航
工具箱