在C语言中,最常见的输出函数就是printf( )了,通常我们可以将要输出的数据用双引号括起来,然后再将它放入printf( )的括号中就可以了。
程序实例 ch3_1.c:打印字符串“C程序设计”两次,且将它打印在同一行中。
在程序实例ch3_1.c中,我们可以看到字符串“C程序设计”在同一行中打印了两次。C语言提供了一种控制字符,可让我们将上述字符串分别打印在不同的两行中,这个控制字符是“\n”,这个字符主要的目的是指示输出装置,跳行打印输出字符。
程序实例 ch3_2.c:重复打印字符串“C程序设计”,但是将它分两行打印出来。
程序实例 ch3_3.c:打印字符串“C程序设计”字符串两次,但是按照不同格式将它打印出来。
printf( )函数除了可以直接打印字符串之外,还可以用格式化的方式控制输出的结果。本节将介绍如何利用“%d”执行十进制整数的打印,其打印结构如下所示。
在使用上述printf( )函数打印数据时,必须注意下列几点:
(1)第一个格式符号配合第一个欲打印的变量,其他以此类推。
(2)在控制打印区内的格式符号之间,可以有许多空格,或是没有任何空格。
(3)在打印变量区内,各变量之间一定要用逗号隔开。
(4)打印变量区的变量也可以是一个表达式。
(5)控制打印区需用双引号括起来。
(6)控制打印区和打印变量区之间需用逗号隔开。
程序实例 ch3_4.c:基本整数输出的实例应用,本程序将会打印exercise ch3_4.c,但“3”和“4”分别用整数变量将它打印出来。
上述变量i配合第一个格式符号,变量j配合第二个格式符号。
程序实例 ch3_4_1.c:打印变量区是一个表达式。
另外,在使用打印变量时,还必须要知道如何修饰输出的位置。这个修饰字通常是由阿拉伯数字构成,一般我们将它放在%和d之间。修饰字和整数格式输出间的规则如下。
1.%d
在此类的输出格式下,C语言输出的格数和变量的长度相同。
实例1: 假设变量值是356,则输出时会预留3格空间,如下所示:
假设变量值是18,则输出时会预留2格空间给它,如下所示:
2.%nd
n是整数值,代表输出时预留的输出格数。使用此种方式输出时,会遇到两种情况:一种情况是预留格数比输出值所需要的空间大,此时会将输出结果向右对齐;另一种情况是预留格数比输出值所需要空间小,此时会忽略预留格数,而自动匹配实际所需的格数。
实例2: 假设变量值是356,控制打印的格式符号是%2d,则打印结果如下所示:
实例3: 假设变量值是356,控制打印的格式符号是%5d,则打印结果如下所示:
3.%-nd
这个输出格式和前一个类似,唯一不同的是,若预留格数比输出值所需的空间大时,会将输出结果向左对齐。
实例4: 假设变量值是356,控制打印的格式符号是%-5d,则打印结果如下所示:
4.%+nd
这个输出格式会将数值的正负号显示出来。
实例5: 假设变量值是356,控制打印的格式符号是%+5d,则打印结果如下所示:
5.%0nd
这个输出格式会在数值前的空白处填“0”。
实例6: 假设变量值是356,控制打印的格式符号是%05d,则打印结果如下所示:
程序实例 ch3_5.c:格式化输出某一整数变量值的应用。
浮点数变量打印的使用规则如下:
1.%f
在此类的输出格式下,C语言会预留10格空间供输出使用,假设格数空间大于变量值所需的空间,则剩余空间供变量的小数点使用。
值得注意的是,一般系统浮点数只能存储6个或7个数字的精确度(又称有效位数),而我们所要的输出数字是10格,所以真正输出时也许小数点的值会略为不同于实际值。程序实例ch3_6.c会说明这个概念,由于会有这种差异,所以在实际格式输出时,我们应该避免以这种方式输出数据。
2.%m.nf
在这种输出格式下,m代表浮点数的输出宽度,n代表小数点所需宽度。和整数输出格式一样,如果所要求的空间不够,系统会自己配置足够的空间供输出使用。若是配置的空间太多,则系统输出结果会向右对齐。
实例1: 假设变量值是123.56,控制打印格式符号是%8.2f,则打印结果如下所示:
3.%-m.nf
这个输出格式和上一规则类似,唯一的不同是,若预留格数比输出值所需的空间大,C语言会将输出结果向左对齐。
实例2: 假设变量值是123.56,控制打印格式符号是%-8.2f,则打印结果如下所示:
4.%+m.nf
这个输出格式会将数值的正负号显示出来。
实例3: 假设变量值是123.56,控制打印格式符号是%+8.2f,则打印结果如下所示:
5.%0m.nf
这个输出格式会在数值前的空白处填“0”。
实例4: 假设变量值是123.56,控制打印格式符号是%08.2f,则打印结果如下所示:
注 双倍精度浮点数的输出可以使用%f,也可以使用%lf,也就是在%和f字符间增加l。
程序实例 ch3_6.c:格式化输出某一实数变量值的应用。
字符打印的规则如下。
1.%c
在此格式下会预留一格空间供输出使用。
实例1: 假设变量值是“a”,控制格式符号是%c,则输出结果如下所示:
2.%nc
在此格式下会预留 n 格空间供输出使用,但输出结果将会向右对齐。
实例2: 假设变量值是“a”,控制格式符号是%3c,则输出结果如下所示:
3.%-nc
在此格式下会预留 n 格空间供输出使用,但输出结果将会向左对齐。
实例3: 假设变量值是“a”,控制格式符号是%-3c,则输出结果如下所示:
程序实例 ch3_7.c:格式化输出某一字符变量值的应用。
在ASCII码值表内(如附录A所示),几个重要分类字符如下:
0~31:控制字符或是通信专用字符,可以参考2-3-2节。
32~47:标点符号和运算符号字符,其中32是空格。
48~57:0~9这10个阿拉伯数字。
58~64:符号字符。
65~90:26个大写英文字母。
91~96:符号字符。
97~122:26个小写英文字母。
接下来将介绍一些打印字符的程序实例。
程序实例 ch3_8.c:基本字符输出及ASCII码值的应用。
程序实例 ch3_9.c:字符变量的另一个应用。
程序实例 ch3_10.c:使用两种方式输出响铃。
在2-3-2节介绍了“\t”特殊字符,这是可以让输出依据键盘的Tab键控制输出位置,细节可以参考下列实例。
程序实例 ch3_11.c:Tab键控制输出的应用。
2-3-2节介绍了两种字符的表示方式:
“\xdd”:其中x后面的两个d各代表一个十六进制数值。
“\ddd”:其中3个d各代表一个八进制数值。
程序实例 ch3_12.c:十六进制的字符输出。
程序实例 ch3_13.c:八进制的字符输出。
除了以上常用的格式化输出变量值的应用外,printf( )函数还提供下列格式化打印方式:
%ld:长整数打印。
%s:主要用于打印字符串,本章会简单解说,将在第8章字符串彻底剖析中做详细说明。
%e:以e记号(科学记数法)输出浮点数。
%E:以E记号(科学记数法)输出浮点数。
%u:不带符号的十进制整数输出。
%o:八进制整数输出。
%x:十六进制整数输出,输出英文字母a~f时是小写。
%X:十六进制整数输出,输出英文字母A~F时是大写,最常应用在标记变量在内存的地址,标记内存地址时会省略左边的0,本书第8章程序实例ch8_20_1.c会说明,第11章指针章节则会大量使用。
%p:十六进制输出变量的内存信息,这也是C语言官方手册建议使用输出内存信息的方式,输出时英文部分会使用大写,如果计算机是以8位长度标记内存地址,内存地址是62FFFA,会得到000000000062FFFA的表示,相当于会将左边的0也输出,完整表达内存地址,本书第8章ch8_20.c实例会做说明。
以上9种输出格式也和整数或浮点数输出格式一样,有以下类似的输出原则:
(1)在%和符号格式值之间若没有任何修饰字,则C语言会依照实际需要做输出。
□ %s:对字符串而言,会依照字符串长度输出。
□ %e:预留12格供输出使用。
□ %u,%o,%x:依照实际需要格数输出。
(2)若%和符号格式值之间有修饰词指定输出长度,则有两种情况。若指定长度大于输出要求,则打印时会向右对齐。若是指定长度小于输出要求,则C语言会自动配给足够空间供它使用。
(3)当%和修饰词之间有“-”符号时,若指定输出长度大于输出要求长度,则打印时会向左对齐。
程序实例 ch3_14.c:格式化输出其他类型变量的应用。
程序实例 ch3_15.c:另一种不寻常的printf( )输出应用。先前的各种应用实例大多将变量放在打印变量区内,然而也可以直接将某一数值放在打印变量区内,如本实例所示。