- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈初学者使用scanf函数常见问题
浅谈初学者使用scanf函数常见问题【摘要】 本文针对学生使用scanf函数常出现的诸多问题,具体示例给出解决办法,目的在于使得初学者能够正确使用有效地scanf函数。 【关键词】 scanf函数;常见问题 scanf函数是C语言中最常用的输入函数,但如果使用不慎就会出现错误或得不到预想的结果。笔者在教学过程中,常看到学生对此感到困惑,现将常见问题归结如下并给予解析,目的在于帮助初学者能够正确有效地使用scanf函数。 1 问题一:什么情况下变量名前应该有地址符’’ 初学者容易犯如下错误:int a;scanf(“%d”,a);这类错误很容易避免和纠正,只需正确理解scanf函数的作用。scanf函数调用格式为: scanf(格式控制,地址列表);作用是将键盘输入的数据保存到指定的地址中,因此在scanf函数中“格式控制”后面应当是变量地址,而不应是变量名。本例正确的使用应该是:scanf(“%d”,a); 但有的情况下有地址符’’反而是不正确的,例如:char str[20]; scanf (“%s”, str); 正确的应该是:scanf(“%s”, str);这是因为str为数组名,代表该数组的起始地址,不必要再加运算符。对于字符串指针变量,也同样如此。因为指针变量名本身就是地址,不需要在变量名前面加上’’。 2 问题二:数据输入格式不对 学生使用scanf函数读取数据时,还经常发现输入的值与输出的不符。例如:(1)scanf(“%d,%d,%d”,a,b,c);(2)scanf(“%d:%d:%d”,h,m,s);(3)scanf(“a=%d,b=%d,c=%d”,a,b,c);以上三条语句均为合法语句,输入1□2□3?(注:□表示空格,?表示回车,下同)或1?2?3?无错误提示,但结果a、b、c的值输出时并不是1、2、3。本例正确的输入方式是:(1) 1,2,3?(2)1:2:3?(3)a=1,b=2,c=3? 原因在于,当scanf函数的“格式控制”字符串中除了格式说明以外还有其它字符时,则在输入数据时在对应位置应当输入与这些字符相同的字符。 初学者还经常这样编程:int a; scanf(“%d\n”,a);很多人认为此处的’\n’的作用与printf(“%d\n”,a);中的转义字符相同。实际上在scanf函数中格式字符串内的转义字符(如’\n’),系统并不把它当转义字符来解释,而是将其视为普通字符,所以也要原样输入,如输入5\n?或5n? 。为了保证正确输入数据,要先记住程序中scanf函数设定的格式,再按照要求输入数据。 3 问题三:输入的数据与输出的类型不符 输入的数据与输出的类型不一致时,编译时并不给出出错信息,但运行结果会导致原意不符。例如:int a;scanf(“%d”,a); printf(“%ld”,a);由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。正确的用法应该是将输入数据的类型和输出数据的类型一致,本例可将scanf(“%d”,a);改为scanf(“%ld”,a);再比如有a=3 ,b=4.5;printf(“ %f%d\n”,a,b); 则输出的结果与原意不符。这种错误尤其需要注意。 4 问题四:用%c格式输入字符的常见问题 例如:对于scanf(“%c%c%c”,c1,c2,c3); 在输入:A□B□C?后,c1=‘A’,c2=‘ ‘,c3=‘B’ ;只有当输入为:ABC?时,才能使字符’A’,’B’,’C’分别赋予变量c1,c2,c3。类似的:int a;char c1;scanf(“%d%c”,a,c1);如果输入5□A?后,a的值为5,c1的值为空格而不是A;而 char c1,str[20]; scanf(“%s%c”,str,c1); 后面的字符型变量会因误接受前面的空格符或回车符而发生混乱错误。原因在于用%c格式输入字符时,空格字符和转义字符都作为有效字符输入。如果在格式控制中加入空格作为间隔,如 scanf (“%c %c %c”,a,b,c); /*注意%c之间有个空格*/ 则输入时各数据之间可加空格。 5 问题五:使用%s格式读取包含空格字符串 在scanf函数中,可以使用%s读取一个字符串,但是读取字符串时不忽略空格。例如char str[20]; scanf(“%s”,str); 当输入字符串“I am a student.”时,字符数组str只能接收第一个空格前的单词“I”,而不是整行字符串。因为%s的格式在遇到空格认为输入结束。对于初学者来说,在输入的字符串中包含空格时建议使用gets函数。如char str[20]; gets(st
文档评论(0)