C语言程序设计案例式教程(第2版)
上QQ阅读APP看书,第一时间看更新

知识讲解

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()函数中不常使用,读者了解即可。