(二)C语言——数据输入语句scanf()函数

本文详细介绍了C语言中的数据输入函数scanf(),包括其一般格式、格式字符及其功能,以及使用时应注意的问题。讲解了%d、%o、%x等格式字符的含义,输入数据宽度的设定,类型修饰符的使用,并给出了实例解析输入过程中的细节和常见问题。
摘要由CSDN通过智能技术生成

(二)C语言——数据输入语句scanf()函数
输入语句是动态赋值,即在程序运行过程中接受输入数值。与数据的输出一样,C语言也提供了标准的数据输入函数。
1.scanf()函数的一般格式
scanf()函数的一般格式为:
scanf(格式控制字符串,输入项表);
其功能是按照指定的格式接收由键盘输入的数据,并存入输入项变量所在的内存单元中。其中的格式控制字符串构成的内容与printf()函数类似,包含格式说明和普通字符。输入项表中的各输入项用逗号隔开,各输入项必须为地址引用,通常由“&”后面跟变量名组成或者是数组、字符串的首地址。
例如,对于“scanf("%d%f",&n,&f);”语句,“%d%f”是格式控制字符串,&n和&f分别表示n和f的地址,这个地址是编译系统在内存中给n和f变量分配的。同时,要注意输入时在两个数据之间要用一个或多个空格分割,也可以用回车键、跳格键Tab。如输入时可以采用:
8
9.2
则8和9.2分别存入变量n和f所在的内存单元中。
2.scanf()函数的格式字符
格式字符用于规定相应输入项的输入格式,每个格式说明都必须用“%”开头,以一个“格式字符”作为结束。允许用于输入的格式字符和它们的功能如下表所示。

格式字符说明
d输入十进制数
o输入整数,整数可以是带前导0的八进制数,也可以是带前导0x(或0X)的十六进制数
x,X以十六进制形式输入整数(有无前导0x或0X均可)
u输入无符号十进制整数
c输入一个字符
s输入字符串
f以小数形式或指数形式输入实数
e,E,g,G与f的作用相同

说明:
(1)%o,%x用于输入八进制、十六进制的数。例如:
scanf("%o%x",&a,&b);
printf("%d,%d",a,b);
若输入为12 12 或012 0x12,则得到的结果为10,18。
(2)输入数据宽度:在格式字符前可以用一个整数指定输入数据所占的宽度,由系统自动截取所需数据。例如:
scanf("%3d%3d",&x,&y);
printf(“x=%d,y=%d”,x,y);
若输入123456,则得到的结果为:
x=123,y=456
即系统自动截取前3位数据赋给变量x,继续截取3位数据赋给变量y。
但是,在输入实数型数据时,不允许指定小数位的宽度,这一点有别于printf()函数。例如,“scanf(“%5.2f”,&x);”是错误的,不能用此语句输入2位小数的实型数。
(3)类型修饰符:h和l,分别表示输入短整型数据和长整型数据(或双精度实型数)。
例如:
scanf("%ld%lo%lx",&x,&y,&z);
scanf("%lf%le",&a,&b);
scanf("%hd%ho%hx",&m,&n,&k);
(4) * 表示空过一个数据。例如:
scanf("%d%*% d",&x,&y);
若输入为3 4 5 ,则得到的结果为
x=3,y=5
(5)对于unsigned型的数据,用%u,%的,%o,%x输入皆可。
3.使用scanf()函数时应注意的问题
(1)输入项表只能是地址,表示将输入的数据送到相应的地址单元中;所以对于基本类型变量,一定要加“&”,而不能只写变量名。
(2)当调用scanf()函数从键盘输入数据时,最后一定要按下回车键,scanf()函数才能接受从键盘输入的数据。当从键盘输入数据时,输入的数据之间用间隔符隔开,间隔符个数不限。
(3)在“格式控制字符串”中,格式说明的类型与输入项的类型应一一对应匹配。
(4)在“格式控制字符串”中,格式说明的个数应该与输入项的个数相同。若格式说明的个数少于输入项的个数时,多余的数据项并没有从终端接收新的数据;若格式说明的个数多于输入项的个数时,多余的格式说明将不起作用;
(5)如果在“格式控制字符串”中插入了其他普通字符,这些普通字符不能输出到屏幕上。但在输入时要求按一一对应的位置原样输入这些字符。
(6)在用%c格式输入字符时不需要分割符将各字符分开。
(7)某一数据输入时,遇到下列输入则认为,遇到下列输入则认为当前输入结束:
遇到空格、回车键、跳格键时输入结束。
到达指定宽度时结束,如为“%3d”,则只取3列。
遇到非法输入时结束。例如
scanf("%d%c%f",&x,&y,&z);
如果输入为1234k543o.22,则得到:
x=1234,y=‘k’,z=543
遇到字母o认为非法,数据输入到此结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值