类型:
- %d:以十进制形式输出带符号整数(正数不带正号)。
- %o:以八进制形式输出无符号整数(不输出前缀0)。
- %x or %X:以十六进制形式输出无符号整数(不输出前缀0x)。
- %u:以十进制形式输出无符号整数。
- %f:以小数形式输出单,双精度实数。
- %e or %E:以指数形式输出单,双精度实数。
- %g or %G:以%f或%e中较短宽度输出单,双精度实数。
- %c:输出单个字符。
- %s:输出字符串。
符号:
- “-”:结果左对齐,右边填空格。
- “+”:输出符号(正号或者符号)。
- “空格”:输出值为正时冠以空格,为负时冠以负号。
- “#”:对c,s,d,u无影响,对 o 类,在输出时加前缀 o;对 x 类,在输出时加前缀 0x;对 e,g,f 类当结果有小数时才给出小数点。
输出宽度:
用十进制来表示输出最少位数,若少于指定位数,按定义补零或空格,反之,按实际输出。
精度:
用“.”表示,后接十进制数。
对数字:表示输出小数位数。
对字符:表示输出字符个数。
注:如果输出长于定义,则会截取超出部分。
长度:
长度格式符:“h",“l”,h为短整型输出,l为长整型输出。
long int 输出 4 字节。
short int 输出 2 字节, (砍去2字节,再转换为10进制)
代码示例:(对于输出的宽度和右对齐补0等操作字符串,整型,和浮点数都是相同的,我就在整型举例,后面就不在赘述了。)
/*对整型操作*/
int a = 123456;
// 123456 正常输出
printf( "%d\n", a );
// 123456 定义宽度少于输出,按实际输出
printf( "%3d\n", a );
// 空格空格空格123456 默认右对齐,左边补空格
printf( "%9d\n", a );
// 000123456 默认右对齐,定义左补0
printf( "%09d\n", a );
// 123456空格空格空格 左对齐,右补空格
printf( "%-9d\n", a );
// 123456空格空格空格 ~~那我们控制输出左对齐,补0,失败~~
printf( "%-09d\n", a );
//我也不知道为什么无法左对齐,右补0
/*对浮点型操作*/
double b = 3.14159;
// 3.14159 正常输出
printf( "%lf\n", b );
// 3.1415 对小数位进行控制
printf( "%.4lf\n", b );
// 3. #号对浮点的操作
/*有小数位数输出保留小数点,无时则不保留小数点*/
printf( "%#.0lf\n", b );
/*对字符串操作*/
char s[] = "abcdef";
// abcdef 一般输出
printf( "%s\n", s );
// abc 控制输出长度
printf( "%.3s\n", s );
// 空格abc 控制输出长度和宽度。
printf( "%4.3s\n", s );
补充:
对于宽度和小数点位数(或者字符串输出长度)都可以用输入来控制
例:
double c = 123456;
printf( "%*.*lf", 20, 5, c);
//输出长度为20,小数位为5位,整型字符串同理。
疑惑:
对于左对齐右边补充0,该如何用printf实现呢?