scanf()函数
printf()函数为格式化输出函数,该函数最后一个字符‘f’就表示“格式”(format)的意思,其功能是按照用户指定的格式将数据输出到屏幕上。printf()函数的调用形式如下所示:
printf("格式控制字符串",[输出列表]);
上述printf()函数调用中,格式控制字符串用于指定输出格式,它由格式控制串和非格式控制字符串组成。格式控制字符串以符号%开头,后面跟有各种格式控制字符,指定输出数据的类型、形式、长度、精度等,格式控制字符串的具体形式如下所示:
"%[标志][宽度][.精度][长度]类型"
在格式控制字符串中,标志、宽度、精度、长度等都是可选的,但“%类型”是必须要指定的,例如,以%c格式输出一个字符,以%d输出一个整数。下面分别介绍格式控制字符标志位的组成部分。
1、类型
printf()函数可以输出任意类型的数据,如整型、字符型、浮点型数据等,它常用的输出类型格式控制字符如表1所示。
表1 printf()函数常用的输出类型格式控制字符
格式控制字符 | 含义 |
---|---|
s | 字符串 |
c | 单个字符 |
d | 有符号十进制整型 |
u | 无符号十进制整型 |
o | 无符号八进制整型 |
x | 无符号十六进制整型小写 |
X | 无符号十六进制整型大写 |
f | 单精度/双精度浮点型(默认打印6位小数) |
e | 科学计数e |
E | 科学计数E |
p | 变量地址 |
使用输出类型格式控制字符可以输出不同类型的数据,示例代码如下:
printf("%c", 'H'); //以%c格式输出字符'H'
printf("%s", "Hello, world!\n"); //以%s格式输出字符串"Hello, world!"
printf("%d", 100); //以%d格式输出整数100
指定输出类型,printf()函数就会按照指定的类型输出后面的参数数据,每一个格式控制字符对应一个参数,如果要连续输出多个数据,则相应的要使用多个控制字符,示例代码如下:
printf("%d%d%d\n",1,2,3); //使用3个%d输出三个整数1、2、3
printf("%f\n%c\n",2.1,'a'); //使用%f与%c输出2.1与字符'a'
在上述代码中,第1行输出三个连续整数,1、2、3这三个整数会自动与3个%d从前往后匹配。第2行代码也是如此,浮点数2.1会自动与%f匹配,字符‘a’会自动与%c匹配。
2、标志
printf()函数中的标志字符用于规范数据的输出格式,如左对齐、右对齐、空缺填补等,标志符有“-”、“+”、“0”、空格、“#”五种,具体如表2所示。
表2 printf()函数标志符
标志符 | 含义 |
---|---|
- | 左对齐;printf()函数输出数据默认为右对齐。 |
+ | 当一个数为正数时,前面加上一个+符号。默认正数不显示+符号。 |
0 | 右对齐时,用0填充左边空缺。默认使用空格填充。 |
空格 | 输出正数时,前面为空格;输出负数时,前面带-符号 |
# | 对%c、%s、%d、%u等之类无影响 |
对%o格式,输出时加上八进制前缀0 | |
对%x(%X)格式,输出时加上十六进制前缀0x |
3、宽度
用十进制整数来表示输出数据的最少位数,若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
以不同的宽度输出数据123,示例代码如下所示:
printf("%d\n", 123); //默认宽度
printf("%5d\n", 123); //设置宽度为5
printf("%10d\n", 123); //设置宽度为10
上述代码输出结果如图1所示。
图1 以不同的宽度输出数据123
由图1可知,printf()输出数据默认是右对齐,当数据实际位数少于设置的宽度时,左侧以空格填充。读者也可以结合标志位调整对齐方式或者以0填充左侧空缺,示例代码如下:
printf("%d\n", 123);
printf("%-5d\n", 123); //添加-符号,左对齐输出
printf("%010d\n", 123); //添加0,左边以0填充
上述代码的运行结果如图2所示。
图2 添加标志位输出数据123
由图2可知,添加“-”符号标志位输出数据,第二个123变成了左对齐,添加“0”标志位后,第三个123左侧空缺以0填充了。读者可尝试使用其他标志位输出数据查看输出格式的变化。
4、精度
精度格式以字符“.”开头,后面跟十进制整数,精度主要作用于浮点型数据,表示输出小数点后面的位数。如果作用于整型数据,则表示按照一定宽度输出数据,左侧空缺填充0。在使用精度输出时,若实际位数大于所定义的精度数,则截去超出的部分。
精度的使用示例代码如下所示:
printf("%f\n", 1.234567); //默认输出小数点后6位
printf("%.8f\n", 1.234567); //输出小数点后8位,后面填充0
printf("%.3f\n", 1.234567); //输出小数点后3位,截断超出的部分
printf("%.6d\n", 123); //输出123的宽度为6,左侧填充0
上述代码的运行结果如图3所示。
图3 printf()函数输出精度
5、长度
长度格式符包括h、l两种,h表示按短数据类型量输出;l表示按长数据类型输出。长度格式控制输出示例代码如下:
printf("%d\n", 123); //正常输出
printf("%hd\n", 123); //按短数据类型输出
printf("%lf\n", 1.23); //按长数据类型输出
长度格式控制在printf()函数中不常使用,读者了解即可。