1.scanf函数
格式输入函数scanf()是从终端输入若干任意类型的数据,相对于getchar函数(只能输入一个字符)而言,它的功能非常强大。scanf函数的一般形式为:
例如:scanf(“%d%d”,&a,&b)。
格式说明:
(1)该函数的功能是按用户指定的格式从终端把数据输入到指定的变量之中。
(2)格式控制字符串的作用与printf()相同,但不能显示除格式控制字符串以外的其他普通字符。上例中“%d”输入十进制整数。
(3)地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。例如,&a、&b分别表示变量a和变量b的地址,之间用逗号分隔,这个地址就是编译系统在内存中给变量a和b分配的地址。应该把变量的值和变量的地址这两个不同的概念区别开来。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。上例中是输入两个十进制整数,分别赋给变量a和b。
2.格式控制字符串
格式控制字符串的一般形式为:
%[*][数据宽度][长度]类型符号
格式说明:
(1)方括号[]中的项为可选项,根据实际要求选择使用。
(2)格式控制字符串要以“%”开头。
(3)“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
(4)宽度:用十进制整数指定输入的宽度(即字符数)。
(5)长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf),h表示输入短整型数据。
表2-6 scanf()格式字符及意义
下面以程序li2_3_4为例详细说明如何利用scanf()输入整型数据。
【例2-10】程序li2_3_4。
【程序说明】
(1)第一条输入语句,当输入两个整数时可以用一个或多个空格间隔,也可以用Enter键或者Tab键间隔。若输入语句中格式控制字符之间用逗号(或其他符号)间隔,scanf(“%d,%d”,&a,&b),则语句执行时输入的两个数据也要用逗号(或其他符号)间隔。
(2)第二条输入语句,%2d表示只接受2位十进制整数,当输入1234时,只接受12。(www.xing528.com)
(3)scanf()中要求给出变量地址,如给出变量名则会出错。
再举几个关于scanf()和printf()的应用实例。
【例2-11】程序li2_3_5。
【程序说明】
(1)输入语句“scanf("%*6d%4d%2d%2d%*d",&year,&month,&day);”中,*符号表示该输入项读入后不赋予相应的变量,即跳过该输入值。%*6d表示跳过6位数值,%4d表示接收4位数值给变量year,连续2个%2d%2d表示接收4位数值,前2位给变量month,后2位给变量day,%*d表示跳过任意位数值。
(2)输出语句“printf("%4d-%02d-%02d",year,month,day);”中,%02d表示输出变量的值占位的空间,不够2位时左面补0。
【例2-12】程序li2_3_6。
程序运行结果如图2-5所示。
图2-5 li2_3_6执行结果
【程序说明】
(1)第一条输入语句中格式控制字符用逗号隔开,所以在输入时两个双精度数也要用逗号隔开。输入数据可以用小数式或指数形式,默认保留6位小数。
(2)第二条输入语句用%5lf来限制输入数据的宽度为5,所以当输入12.1234时宽度超过5,变量x1只接收前5位12.12(包括小数点)。而x2却显示非正常数值,是因为受第一个输入数值多余位数的影响。另外,需要注意不能用%.n限制输入数据的精度,如scanf("%5.2f",&a),是非法的,也会出现非正常数值。
【例2-13】程序li2_3_7。
程序li2_3_7的执行结果如图2-6所示。
图2-6 li2_3_7执行结果
【程序说明】
(1)在输入语句scanf("%c%c%c",&ch1,&ch2,&ch3)中,格式控制字符串中无非格式字符,在输入字符数据时,则认为所有输入的字符均为有效字符。例如,图2-6右图所示,当输入“a空格b空格c”时,ch1值为a,ch2值为空格,ch3值为b。
(2)若输入语句改为scanf("%c,%c,%c",&ch1,&ch2,&ch3),格式控制字符之间用逗号(或其他符号)隔开,输入时字符也要用逗号(或其他符号)隔开,即“a,b,c”。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。