printf
语法:
#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位,并且是左对齐的。
你可以使用字符l和h修饰%d, %i, %o, %u, 和 %x 类型修饰符来表示long 和 short 数据类型(例如,%hd表示短整型)。
类型修饰符 %e, %f, 和 %g 可以使用置前l字符来指示双精度。 类型修饰符 %g, %f, 和 %e 可以在前面放置一个#字符来确保小数点会被显示,即使小数点后没有数。
和%x类型修饰符一起使用#字符表示十六进制数将会打印一个0x前缀。
和%o类型修饰符一起使用#字符表示八进制数显示时将会带一个0前缀。
在类型修饰符前插入一个正号+将会强制正值前加一个+号。放置一个空格符 ' ' 将会强制正值前由一个空格符引导。
你同样可以在输出字符串中包含 constant escape sequences 。