首页 百科知识 格式化输入输出函数

格式化输入输出函数

时间:2022-10-20 百科知识 版权反馈
【摘要】:当输出项是字符时,输出的将是该字符的ASCII码值。当输出的数据项是整数时,输出的将是该整数对应的ASCII码字符。值得注意的是,以%f格式输出的数据其数字并非都是有效数字。h表示输入短整型数据。由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。

3.2.3 格式化输入输出函数

1.格式化输出函数

模式化输出函数中使用的格式字符如表3-1所示。

表3-1 printf函数中使用的格式字符

img76

(续表)

img77

格式:printf(格式控制,输出项表);

功能:将“输出项表”中给出的输出项按“格式控制”中规定的输出格式输出到标准输出设备。

说明:

(1)“输出数据列表”可以是常量、变量和表达式,输出项之间用逗号分隔。

(2)“格式控制字符串”可以包括“格式转换说明符”,用来规定相应输出项内容的输出格式;“转义字符”,用来输出转义字符所代表的控制代码或特殊字符;“普通字符”,即原样输出的字符。

(3)格式转换说明符必须用小写字母,如%d不能写成%D。

普通字符:是需要原样输出的字符(包括转义字符)。

格式说明:由“%”和格式符组成,如%c和%f等,作用是将要输出的数据转换为指定格式后输出。

下面对表中常用的格式字符作进一步说明。

(1)%d,用于指定输出十进制整数。对应的输出数据项通常是整数,也可以是字符。当输出项是字符时,输出的将是该字符的ASCII码值。常用的形式为%d、%md和%ld。

例如:

img78

【例3-3】

img79

屏幕显示结果:

img80

(2)%c,用于输出一个字符。对应的输出数据项通常是字符,也可以是数值在0~255之间的整数(该整数作为ASCII码值)。当输出的数据项是整数时,输出的将是该整数对应的ASCII码字符。常用的形式为%c。

【例3-4】

img81

输出结果:

img82

(3)%s,用于输出一个字符串,常用的形式为%s。

【例3-5】

img83

屏幕显示结果:

img84

(注:-表示空格)

(4)%f,用于输出实数(单、双精度数据)。常用的形式为%f、%m.nf和%-m.nf。

以%f格式输出的数据(单精度或双精度),整数部分全部输出,小数部分输出6位小数。

%m.nf表示输出的数据共占m位(包括小数点所占的位置),小数部分为n位,若数值长度小于m,则不足位置左边补空格。

%-m.nf表示可以在指定输出宽度的同时指定数据左对齐,在宽度前加一个“-”来实现。

值得注意的是,以%f格式输出的数据其数字并非都是有效数字。一般来说,单精度的有效位数为7位,双精度实数的有效位数位16位。

【例3-6】

img85

屏幕显示结果:

img86

【例3-7】

img87

屏幕显示结果:

img88

2.格式化输入函数

格式化输入函数中使用的格式字符如表3-2所示。

表3-2 scanf函数中使用的格式字符

img89

格式:scanf(格式控制,地址表);

功能:用来输入任何类型数据,可同时输入多个不同类型的数据。

说明:

(1)格式字符串的一般形式为:%[*][输入数据宽度][长度]类型,其中有方括号[]的项为任选项。

(2)地址表中每项以逗号分隔,列出需要输入的项(变量)的地址,而不是变量名。

(3)同printf函数一样,格式控制是用双引号括起来的字符串,包括普通字符和格式说明。普通字符是需要原样输入的字符,一般不提倡使用,格式说明由%和格式符组成,如%c和%f等,作用是规定按指定的格式输入数据。

(4)“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。如:

img90

当输入为:1  2  3时,把1赋予a,2被跳过,3赋予b。

(5)scanf中“格式控制”的格式字符必须与“格式控制”后的变量类型匹配。

例如:

img91

(6)使用%c时,空格和转义字符均作为有效字符输入。

例如:

img92

(7)如果格式说明符之间没有任何字符,则在输入非字符型数据时,两个数据之间要使用空格、Tab或回车键做间隔;如果格式说明符之间包含其他字符,则输入数据时,应输入与这些字符相同的字符做间隔。

例如:

img93

在输入数据时,应采用如下形式:

20,7.8,a

(8)宽度:用十进制整数指定输入的宽度(即字符数)。

例如:

img94

输入:12345678

只把12345赋予变量a,其余部分被截去。

又如:

img95

输入:12345678

将把1234赋予a,而把5678赋予b。

(9)长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。

(10)可以在格式说明符的前面指定输入数据所占的宽度,系统将自动按此宽度来截取所需的数据。

【例3-8】

img96

输入:

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)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

例如:

img97

输入为: d  e  f

则把'd'赋予a,''赋予b,'e'赋予c。

只有当输入为:def时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

如果在格式控制中加入空格作为间隔,如:

img98

则输入时各数据之间可加空格。

【例3-9】

img99

由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。而输入改为MN时,则可输出MN两字符。

【例3-10】

img100

本例表示scanf格式控制串"%c %c"之间有空格时,输入的数据之间可以有空格间隔。

(1)如果格式控制串中有非格式字符则输入时也要输入该非格式字符。

例如:

img101

其中用非格式符“,”作间隔符,故输入时应为:

5,6,7

又如:

img102

则输入应为:

a=5,b=6,c=7

(2)如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。

【例3-11】

img103

由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。如改动程序如下:

【例3-12】

img104

img105

程序运行结果:

img106

当输入数据改为长整型后,输入输出数据相等。

【例3-13】

img107

输入三个小写字母,输出其ASCII码和对应的大写字母。

【例3-14】

img108

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈