C语言:printf() 输出详解

1.printf() 简介

printf函数称为格式输出函数,是一个标准库函数,用于将格式化后的字符串输出到标准输出,它的函数原型在头文件“stdio.h”中。

2.printf函数调用的一般形式

调用格式:

printf("格式化字符串", 输出表列)

格式化字符串包含三种对象,分别为:
(1)字符串常量:原样输出,在显示中起提示作用。
(2)格式控制字符串:用于指定输出格式。
(3)转义字符:在字符串中会被自动转换为相应操作命令。

3.格式控制字符串详解

printf() 的格式控制字符串组成如下:

%[flags] [width] [.prec] [length] type
%[标志] [最小宽度] [.精度] [类型长度] 类型

3.1 标志(flags)

标志(flags)规定输出的样式和取值,具体如下:

字符 含义 示例 结果
- 结果左对齐,右边填空格
(默认是右对齐,左边填空格)
printf("%-5d\n",1234);
printf("%5d\n",1234);
 1234
1234 
+ 输出符号(正号或负号) printf("%+d %+d\n",1234,-1234); +1234 -1234
空格 输出值为正时加上空格,为负时加上负号 printf("% d % d\n",1234,-1234);  1234 -1234
# type是o、x、X时,增加前缀0、0x、0X
type是e、g、f时,结果有小数时才给出小数点
printf("%x %#x\n",1234,1234);
printf("%g %#g\n",1000.0,1000.0);
3e8 0x3e8
1000 1000.0
0 将输出的前面补上0,直到占满指定列宽为止
(不可以搭配使用“-”)
printf("%05d\n",123); 00123

3.2 最小宽度(width)

用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
具体如下:

width 描述 示例 结果
数值 十进制数 printf("%06d",1000); 001000
* 不显示指明输出最小宽度,而是以星号代替,在printf的输出参数列表中给出 printf("%0*d",6,1000); 001000

3.3 精度(.precision)

精度格式符以“.”开头,后跟十进制整数。
具体取值如下:

.precision 含义 示例 结果
.数值 十进制数
(1)对于整型(d,i,o,u,x,X),precision表示输出的最小的数字个数,不足补前导零,超过不截断。
(2)对于浮点型(a, A, e, E, f), precision表示小数点后数值位数,默认为六位,不足补后置0,超过则截断。
(3)对于类型说明符g或G,表示可输出的最大有效数字。
(4)对于字符串(s),precision表示最大可输出字符数,不足正常输出,超过则截断。
(5)precision不显示指定,则默认为0
printf("%.8d\n",1000);
printf("%.8f\n",1000.123456789);
printf("%.8f\n",1000.123456)
printf("%.8g\n",1000.123456);
printf("%.8s\n",“abcdefghij”);
00001000
1000.12345679
1000.12345600
1000.1235
abcdefgh
.* 以星号代替数值,类似于width中的*,在输出参数列表中指定精度。 printf("%.*d\n",8,1000); 00001000

注意: 在对浮点数和整数截断时,存在四舍五入。

3.4 类型长度(length)

类型长度(length)指明待输出数据的长度。
具体如下:

length 含义 占用字节数 示例 结果
hh 将相应的参数按 signed char 或 unsigned char 类型输出 1 printf("%hhd",'A'); 65
h 将相应的参数按 short 或 unsigned short 类型输出 2 printf("%hd\n",32767);
printf("%hd\n",65535);
32767
-1
l 相应的参数按 long 或 unsigned long 类型输出 4 printf("%ld\n",0x7fffffff);
printf("%ld\n",0xffffffff);
2147483647
-1
ll 将相应的参数按 long long 或 unsigned long long 类型输出 8 printf("%lld\n",0x7fffffffffffffff);
printf("%lld\n",0xffffffffffffffff);
9223372036854775807
-1

3.5 类型(type)

类型(type)用于规定输出数据的类型。
具体含义如下:

字符 对应数据类型 含义 示例 结果
d int 有符号10进制整数 printf("%d",520); 520
o unsigned int 无符号8进制整数 printf("%o",520); 1010
u unsigned int 无符号10进制整数 printf("%u",520); 520
x unsigned int 无符号16进制整数(小写abcdef) printf("0x%x",123); 0x7b
X unsigned int 无符号16进制整数(大写ABCDEF) printf("0X%X",123); 0X7B
f float(double) 浮点数(包括float和doulbe) printf("%06.2f",13.14); 013.14
a float(double) 16进制p计数法输出浮点数(小写) printf("%a",15.15); 0x1.e4cccdp+3
A float(double) 16进制p计数法输出浮点数(大写) printf("%A",15.15); 0X1.E4CCCDP+3
e float(double) 科学计数法,使用指数(Exponent)表示浮点数(小写) printf("%e",0.000000123); 1.230000e-007
E float(double) 科学计数法,使用指数(Exponent)表示浮点数(大写) printf("%E",0.000000123); 1.230000E-007
g float(double) 根据数值的长度,选择以最短的方式输出(小写) printf("%g\n%g",0.000000123,0.123); 1.23e-007
0.123
G float(double) 根据数值的长度,选择以最短的方式输出(大写) printf("%G\n%G",0.000000123,0.123); 1.23E-007
0.123
c char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 printf("%c\n",65,);
printf("%c\n",'A',);
A
A
s char* 字符串。输出字符串中的字符直至字符串中的空字符(字符串以空字符’\0‘结尾) printf("%s\n","测试test \0 12345"); 测试test
p void* 以16进制形式输出指针 printf("0x%p","MQ"); 0x0040303D
% 字符% 输出字符‘%’(百分号)本身 printf("%d%%",20); 20%

4.转义字符

转义字符在字符串中会被自动转换为相应操作命令。printf() 使用的常见转义字符如下:

转义字符 含义
\a 警报(响铃)符
\b 回退符
\f 换页符
\n 换行符
\r 回车符
\t 横向制表符
\v 纵向制表符
\ \ 反斜杠
\ ’ 单引号
\“ 双引号
\? 问号
\0 空字符

猜你喜欢

转载自blog.csdn.net/MQ0522/article/details/110518751
今日推荐