知识讲解
1.printf()函数
printf()函数为C语言的标准输出函数,也称为格式化输出函数,该函数名的最后一个字符“f”表示格式(Format),其功能是按照指定的格式将数据输出到控制台。printf()函数的调用形式如下。
printf("格式控制字符串",[输出列表]);
其中,格式控制字符串用于指定输出格式,以符号“%”开头,后面有相应的格式控制字符,用于指定输出数据的类型、形式、长度、精度等。格式控制字符串的具体形式如下。
"%[标志][宽度][.精度][长度]类型"
在格式控制字符串中,标志、宽度、精度、长度等都是可选的,但“%类型”是必须要指定的。例如,以“%c”格式输出一个字符,以“%d”格式输出一个整数。下面介绍格式控制字符的相关知识。
(1)类型
printf()函数可以输出任意类型的数据,包括整型、字符型、浮点型等数据,常用的输出类型格式控制字符如表2-1所示。
表2-1 printf()函数常用的输出类型格式控制字符
使用输出类型格式控制字符可以输出不同类型的数据,示例代码如下。
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”输出3个整数1、2、3 printf("%f\n%c\n", 2.1, 'a'); //使用“%f”与“%c”输出浮点数2.1与字符’a'
在上述代码中,第1行代码用于输出3个连续整数,1、2、3这3个整数会自动与3个“%d”按从前往后的顺序一一匹配。第2行代码也是如此,浮点数2.1会自动与“%f”匹配,字符'a'会自动与“%c”匹配。
(2)标志
printf()函数中的标志符用于规范数据的输出格式,例如左对齐、右对齐、填补空缺等,标志符有−、+、0空格、#共5种,具体如表2-2所示。
(3)宽度
宽度是用十进制整数表示的输出数据的位数。若数据的实际位数大于定义的宽度,则按定义的宽度输出;若实际位数小于定义的宽度,则不足的部分以空格或0填充。
表2-2 printf()函数的标志符
以不同的宽度输出123,示例代码如下。
printf("%d\n", 123); //按实际位数输出 printf("%5d\n", 123); //设置宽度为5 printf("%10d\n", 123); //设置宽度为10
上述代码的运行结果如图2-1所示。
由图2-1可知,printf()输出的数据默认右对齐。当数据的实际位数小于设置的宽度时,左侧空缺以空格填充。也可以结合标志符调整对齐方式或者以0填充左侧的空缺,示例代码如下。
printf("%d\n", 123); printf("%-5d\n", 123); //添加“-”符号,左对齐输出 printf("%010d\n", 123); //添加“0”,左侧的空缺以0填充
上述代码的运行结果如图2-2所示。
图2-1 以不同的宽度输出123
图2-2 添加标志符输出123
由图2-2可知,添加“-”符号输出的数据为左对齐;添加“0”标志符后,第3个123左侧的空缺以0填充。读者可尝试使用其他标志符输出数据,查看数据输出格式的变化。
(4)精度
精度格式以字符“.”开头,后面加十进制整数。精度主要作用于浮点型数据,表示输出数据的小数点后面的位数。如果不设置精度,则默认输出小数点后6位。如果精度作用于整型数据,则表示按照一定宽度输出数据,数据左侧空缺填充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
上述代码的运行结果如图2-3所示。
图2-3 printf()函数按指定的精度输出数据
(5)长度
长度格式控制字符包括h、l两种,h是short的简写,表示按短数据类型输出数据;l是long的简写,表示按长数据类型输出数据。例如,hd表示输出数据的类型为short int,ld表示输出数据的类型为long int,short int与long int所占的内存大小不同,它们所能表示的数据范围也不同。以hd格式和ld格式输出同一个数据时,如果数据不超出short int的范围,两者的输出结果并无差别;如果数据超出short int的范围,则两者的输出结果就有差别。
长度格式控制字符输出的示例代码如下。
printf("%d\n", 123); //正常输出 printf("%hd\n", 123); //按短数据类型输出 printf("%lf\n", 1.23); //按长数据类型输出
长度格式控制字符在printf()函数中不常使用,读者了解即可。