浅析C语言中Scanf函数的常见错误及解决方法.doc

上传人:da****u 文档编号:3635472 上传时间:2019-06-28 格式:DOC 页数:3 大小:50.50KB
下载 相关 举报
浅析C语言中Scanf函数的常见错误及解决方法.doc_第1页
第1页 / 共3页
浅析C语言中Scanf函数的常见错误及解决方法.doc_第2页
第2页 / 共3页
浅析C语言中Scanf函数的常见错误及解决方法.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、scanf 函数的隐性错误及解决方法金锐 1,陶斌,焦合军(河南工程学院计算机学院,河南 郑州 451191)摘要:C 语言是大部分理、工科专业学生必修的一门基础课,scanf 函数是 C 语言学习者在学习过程中遇到的一个常见函数。scanf 函数的用法在各类 C 语言教材中都已详细讲解,但是学生还是经常出错,分析了问题产生的原因,重点阐述使用 scanf 函数过程中遇到的隐性错误及解决方法。关键词:scanf 函数;隐性错误;解决方法The implicit errors of scanf function and solutionsAbstract: The C language is a

2、 basic curriculum for the most science and engineering students, scanf function is a common function of C language learners encounter in the process of learning. The usage of scanf function in all types of C language teaching materials are explained in detail, but the student is often wrong, analyze

3、 the causes of the problem, focusing on the use of hidden errors encountered during scanf functions and solutions.Key words: scanf function; hidden errors; solution1 金锐(1973.12),女,研究生,讲师,计算机应用1 序言计算机知识与应用能力是培养面向 21 世纪的高级专业人才极其重要的组成部分。教育部根据高等院校非计算机专业的计算机培养目标,提出了“计算机文化基础” 、 “计算机技术基础”和“计算机应用基础”三个层次教育的课

4、程体系。为此,我校在大一新生中开设了计算机基础 、 C 语言程序设计等计算机课程。其中 C 语言是大部分理工科专业学生必修的一门计算机基础课。C 语言属于高级语言,是面向过程的编程语言,只用标准 C 的库的话,无法编出图形界面,学生不能直接看到效果很好的图形用户界面,同时由于 C 语言语法比较灵活自由,导致编程稍有不慎就会出错,以及 C 语言中的很多算法和数据结构如果不加以理解而只是死记硬背的话是会非常枯燥且容易出错的,所以大部分学生在学习后的体会是:C 语言非常难学,非常枯燥,学后感觉毫无所获,还是云里雾里;如何提高学生学习 C 语言的主动性,培养学生利用 C 语言解决实际问题的能力,是大多

5、数 C语言老师面对的一大难题。本文仅对学生学习C 语言过程中遇到的一个常用又容易出错的scanf 函数的隐性错误进行剖析,并通过实例浅析对此类问题如何处理。scanf 函数是学习 C 语言过程中遇到的一个常见函数,是应该熟练掌握的一个函数,但很多初学者不能很好的运用此函数,编程过程中错误的使用 scanf 函数,导致程序出错不能正常运行,这类错误常使学生不知所措,因为程序能编译成功,而输入原始数据却得不到正确的运行结果,出错原因主要有两种:一是输入的数据与 scanf 函数所要求的输入方法不一致;二是 scanf 函数中使用了与变量类型不匹配的格式字符。对于一些输入格式的错误,只要按照scan

6、f 函数格式细心检查,一般都能发现错误的原因,所以遇到此类错误无需直接指出,让学生自己想办法解决,既提高了学生调试程序的能力,又巩固了课堂上所学的知识。下面主要介绍在使用 scanf 函数时遇到的一些隐性错误。2 隐性错误及解决方法1)输入有空格的字符串char str20;scanf(“%s“,str);printf(“%s“,str); return 0;我们看上边的程序段,输入 Hello World!,输出 Hello,并没有达到预期目的,原因是当scanf 函数扫描到“Hello ”后面的空格就认为对字符数组 str 的赋值结束,并忽略后面的“World!”。这里要注意是“World

7、!”这个残存信息是在 stdin 中,如果继续输入, scanf 函数会扫描 stdin 流。可以改动上面的程序来验证一下。ANSI C 标准向 scanf 函数添加了一种新特性,称为扫描集(scanset) 。扫描集定义了一个字符集合,通过 scanf 函数读入允许的字符并赋给相应的字符数组。扫描集由一对方括号中的一串字符定义,左方括号前必须加上百分号(% ),这个参数的意义是读入一个字符集合。 是个集合的标志,因此% 特指读入此集合所限定的那些字符,比如%A-Z是输入大写字母,一旦遇到不在此集合中的字符便停止。如果集合的第一个字符是“,这说明读取不在“ 后面集合的字符,既遇到“后面集合的字

8、符便停止,注意此时读入的字符串是可以含有空格的 1。可以试着把上边程序中的 scanf 语句改为:“scanf(“%n“,str);”,验证后可知,程序达到预期目的,输入和输出一样。2)键盘缓冲区残余信息问题下面是一个简单的计算器程序段:double num1,num2,num;char op,ch;doscanf(“%lf%c%lf“,switch(op)case /:if(fabs(num2)1e-6) printf(“除数不能为零!n“);else num=num1/num2;printf(“%g/%g=%gn“,num1,num2,num);break;printf(“Do you w

9、ant to continue(Y/N or y/n)?“);scanf(“%c“,while(ch=Y|ch=y);输入:1+2(Enter )输出:1+2=3程序结束,只能进行一次计算,并没有执行循环进行下一次运算,原因是我们每击打一下“Enter ”键,就向键盘缓冲区发去一个“回车”(r) ,一个“ 换行”(n),在这里n 被 scanf 函数“错误”地赋给了 ch。解决办法是在scanf(“%c“,语句。也可以用“空格符”来处理缓冲区残余信息,scanf(“%c“,查看后知道,字符变量 op 的值为 32,为空格的ASCII 码值,scanf 函数将空格赋给字符变量 op了,解决办法就

10、是如果程序有字符格式输入,可以在格式说明%c 前加一个空格。如果输入了非法数据,键盘缓冲区就可能有残余信息问题,解决办法是用 fflush(stdin);2对上面那个程序我们可以做如下处理。while(scanf(“%lf %c%lf“,printf(“您输入了非法字符,请重新输入:n“);fflush( ) 函数功能为清除一个流,用法为 int fflush(FILE *stream)。需注意:如果 stream指向输入流(如 stdin),那么 fflush 函数的行为是不确定的 3。虽然在上例中我们用 fflush(stdin)清空了输入缓冲区,解决了问题,但会影响程序的移植性,某些编译

11、器(如 VC6)支持用fflush(stdin)来清空输入缓冲,但是并非所有编译器都要支持这个功能(linux 下的 gcc 就不支持) ,因为标准中根本没有定义 fflush(stdin)。MSDN 文档里也清楚地写着 fflush on input stream is an extension to the C standard(fflush 操作输入流是对 C 标准的扩充) 4,如果考虑程序的移植性我们应该自己写代码来清空输入缓冲区,就不一一介绍了。3 结论C 语言是大部分理、工科专业学生必修的一门基础课,本文对 C 语言中 scanf()函数在使用时容易出现的隐性错误进行了剖析,并给出解决方法,为学生进一步学习和掌握 C 语言打下基础。参考文献:1 杜永生,苏百兖.Scanf()常见错误及对策技巧J.中国科技信息,2007(2)2 徐志伟. C 语言中使用 scanf()函数常见问题解析J.长春大学学报,2008(12)3 郑嫏嬛.浅谈 C 语言中的格式输入输出函数J. 科技致富向导,2012(15)4 antigloss. C/C+ 误区二:fflush(stdin), http:/ 标准编程,2005

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。