资源描述:
《c语言scanf函数应用问题 》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言scanf函数应用问题 C语言的输入是由系统提供的库函数完成的。scanf函数是C语言中最常用且功能最强的输入函数,但该函数如使用不慎,就会出现错误或得不到预想的结果。以下结果都是基于VC++运行环境。 一、格式说明符和输入项的三对应scanf函数格式中的格式说明应与输入项数据类型一致,个数相等、顺序对应。示例一:inta,b;scanf(“%d%d%d”,&a,&b);printf(“%d,%d”,a,b);输入“345”时,输出“3,4”,没有错误提示信息,但是第三个数没有接收的变量,
2、也就没有输出。再如inta,b;scanf(“%d”,&a,&b);printf(“%d,%d”,a,b);输入“34”时,输出“3,-858993460”,a得到3,但b是一个随机数,都是因为格式说明与输入项个数不一致造成的。再如structst{intnum;charname[10];intage;floatscore;}student;scanf(“%d,%s,%d,%f”,&student);输入“10001,”zhang”,23,68”,运行程序时,无出错信息,但student不能正确接收
3、输入数据。 应该写成:scanf(“%d,%s,%d,%f”,&,,&,&);保证格式说明与输入项个数相等、一一对应,才能使student正确接收输入数据。示例二:chara,b;scanf(“%d%d”,&a,&b);printf(“%d,%d”,a,b);输入“34”时,输出“3,4”,输入整型数据,是字符型数据接收,但是结果正确,因为字符型数据在内存中的存放形式是整型数据。再如floata,b;scanf(“%d%d”,&a,&b);printf(“%d,%d”,a,b);输入“34”时,输
4、出“0,918028288”,即a和b的结果都是随机数,这就是输入格式和接收的数据类型不一样造成的。又如:inta,b;scanf(“%f%f”,&a,&b);printf(“%d,%d”,a,b);输入“”时,输出“1067030938,1079613850”,即a和b的结果都是随机数,这也是输入格式和接收的数据类型不一样造成的。 二、非格式说明符的输入非格式说明符要求用户原样照写输入,既不能更改,又不能漏写。示例一:inta,b;scanf(“a=%d,b=%d”,&a,&b);printf(
5、“%d,%d”,a,b);输入“12”,输出“-858993460,-858993460”,无错误提示,但结果与输入数据不一致,输出a、b的值是随机数。这就是因为scanf函数中设定的格式与输入数据的格式不一致造成的,正确的输入形式应为“a=1,b=2”。所以,为了保证正确输入数据,输入数据前首先看好程序中scanf函数设定的格式,再按照设定的格式正确输入数据。示例二:scanf(“%d,%d”,&a,&b);输入时应用以下形式:3,4↙注意3后面应是逗号,它与scanf函数中的“格式控制”中的逗号
6、对应。如果输入时不用逗号而用空格或其他字符是不对的。3□4↙(不对)3:4↙如果是scanf(“%d□□%d”,&a,&b);则输入时两个数据间应空两个或更多个空格字符。如:3□□4↙或3□□□□4↙ 三、附加格式说明符的说明示例一:inta,b;scanf(“%2d%2d”,&a,&b);printf(“%d,%d”,a,b);输入“1234”,输出“12,34”输入“123”,输出“12,3”输入“123456”,输出“12,34”因为格式中“d”格式字符表示输入整型数据,“2”附加格式说明字
7、符表示输入数据所占宽度为2,因此,无论用户输入什么,系统都将自动截取两位赋给a,再截取两位赋给b。也就是说可以用附加格式说明符指定输入数据所占列数,系统将自动按它截取所需数据。 再如scanf(“%3c”,&ch);如果从键盘上连续输入3个字符abc,由于ch只能容纳一个字符,系统就把第一个字符‘a’赋给ch。示例二:floata;scanf(“%”,&a);输入“1234”,无错误提示,但a并不能接收输入数据,输出a的值为随机数,再尝试输入别的数据,结果都为随机数。用户本意想用这样的scanf格
8、式输入宽度为5位,小数部分为1位的小数,但得不到预想结果。因为,scanf函数中只有“域宽”附加格式说明字符,而没有在“小数位数”附加格式说明字符,应该去掉“.1”,即scanf(“%5f”,&a);或scanf(“%f”,&a);均可,此时输入“”即可接收。所以,应根据scanf函数中规定的格式字符及其附加格式说明字符使用,不能滥用,输入数据时不能规定精度。示例三:doublex;scanf(“%f”,&x);输入“”,输出x的值为随机数,没有接收输入的数据,再输入