3.2.3 格式化输入输出函数
1.格式化输出函数
模式化输出函数中使用的格式字符如表3-1所示。
表3-1 printf函数中使用的格式字符
(续表)
格式:printf(格式控制,输出项表);
功能:将“输出项表”中给出的输出项按“格式控制”中规定的输出格式输出到标准输出设备。
说明:
(1)“输出数据列表”可以是常量、变量和表达式,输出项之间用逗号分隔。
(2)“格式控制字符串”可以包括“格式转换说明符”,用来规定相应输出项内容的输出格式;“转义字符”,用来输出转义字符所代表的控制代码或特殊字符;“普通字符”,即原样输出的字符。
(3)格式转换说明符必须用小写字母,如%d不能写成%D。
普通字符:是需要原样输出的字符(包括转义字符)。
格式说明:由“%”和格式符组成,如%c和%f等,作用是将要输出的数据转换为指定格式后输出。
下面对表中常用的格式字符作进一步说明。
(1)%d,用于指定输出十进制整数。对应的输出数据项通常是整数,也可以是字符。当输出项是字符时,输出的将是该字符的ASCII码值。常用的形式为%d、%md和%ld。
例如:
【例3-3】
屏幕显示结果:
(2)%c,用于输出一个字符。对应的输出数据项通常是字符,也可以是数值在0~255之间的整数(该整数作为ASCII码值)。当输出的数据项是整数时,输出的将是该整数对应的ASCII码字符。常用的形式为%c。
【例3-4】
输出结果:
(3)%s,用于输出一个字符串,常用的形式为%s。
【例3-5】
屏幕显示结果:
(注:-表示空格)
(4)%f,用于输出实数(单、双精度数据)。常用的形式为%f、%m.nf和%-m.nf。
以%f格式输出的数据(单精度或双精度),整数部分全部输出,小数部分输出6位小数。
%m.nf表示输出的数据共占m位(包括小数点所占的位置),小数部分为n位,若数值长度小于m,则不足位置左边补空格。
%-m.nf表示可以在指定输出宽度的同时指定数据左对齐,在宽度前加一个“-”来实现。
值得注意的是,以%f格式输出的数据其数字并非都是有效数字。一般来说,单精度的有效位数为7位,双精度实数的有效位数位16位。
【例3-6】
屏幕显示结果:
【例3-7】
屏幕显示结果:
2.格式化输入函数
格式化输入函数中使用的格式字符如表3-2所示。
表3-2 scanf函数中使用的格式字符
格式:scanf(格式控制,地址表);
功能:用来输入任何类型数据,可同时输入多个不同类型的数据。
说明:
(1)格式字符串的一般形式为:%[*][输入数据宽度][长度]类型,其中有方括号[]的项为任选项。
(2)地址表中每项以逗号分隔,列出需要输入的项(变量)的地址,而不是变量名。
(3)同printf函数一样,格式控制是用双引号括起来的字符串,包括普通字符和格式说明。普通字符是需要原样输入的字符,一般不提倡使用,格式说明由%和格式符组成,如%c和%f等,作用是规定按指定的格式输入数据。
(4)“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。如:
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。
(5)scanf中“格式控制”的格式字符必须与“格式控制”后的变量类型匹配。
例如:
(6)使用%c时,空格和转义字符均作为有效字符输入。
例如:
(7)如果格式说明符之间没有任何字符,则在输入非字符型数据时,两个数据之间要使用空格、Tab或回车键做间隔;如果格式说明符之间包含其他字符,则输入数据时,应输入与这些字符相同的字符做间隔。
例如:
在输入数据时,应采用如下形式:
20,7.8,a
(8)宽度:用十进制整数指定输入的宽度(即字符数)。
例如:
输入:12345678
只把12345赋予变量a,其余部分被截去。
又如:
输入:12345678
将把1234赋予a,而把5678赋予b。
(9)长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。
(10)可以在格式说明符的前面指定输入数据所占的宽度,系统将自动按此宽度来截取所需的数据。
【例3-8】
输入:
1234 23
123456
123a1
结果:
a=1234 b=23
a=123 b=456
(11)scanf函数中没有精度控制,如“scanf("%5.2f",&a);”是非法的。不能企图用此语句输入小数为两位的实数。
(12)scanf中要求给出变量地址,如给出变量名则会出错。如“scanf("%d",a);”是非法的,应改为“scnaf("%d",&a);”才是合法的。
(13)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
(14)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
例如:
输入为: d e f
则把'd'赋予a,''赋予b,'e'赋予c。
只有当输入为:def时,才能把'd'赋于a,'e'赋予b,'f'赋予c。
如果在格式控制中加入空格作为间隔,如:
则输入时各数据之间可加空格。
【例3-9】
由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。而输入改为MN时,则可输出MN两字符。
【例3-10】
本例表示scanf格式控制串"%c %c"之间有空格时,输入的数据之间可以有空格间隔。
(1)如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
例如:
其中用非格式符“,”作间隔符,故输入时应为:
5,6,7
又如:
则输入应为:
a=5,b=6,c=7
(2)如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。
【例3-11】
由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。如改动程序如下:
【例3-12】
程序运行结果:
当输入数据改为长整型后,输入输出数据相等。
【例3-13】
输入三个小写字母,输出其ASCII码和对应的大写字母。
【例3-14】
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。