今天老师检查的时候说如果一个链表为空(简单的说就是while(scanf())一开始没输入数字就按回车的话会进入死循环)的情况,

我当时有点懵,因为文档里强调为空的情况。还好老师叫我自己现场实现一下,

当时想了两个方案:

*一是用getchar()接受第一个回车(我设定的输入回车结束),如果用户第一个键盘输入就是回车,它能工作的很好。

但是当第一个键盘输入不是一个回车的时候,就遇到一个问题:getchar()会吃掉第一个数字

的一部分,之所以说一部分是因为经过我测试发现:

Getchar()能返回的值最大为57,这显然是不合理的。

于是我想到了第二个方法:

*先用getchar读取,如果getchar读取的不是回车,就将它重新放回缓冲区,再又scanf()函数来

读取。但是这个方案有点麻烦,还要区查资料,搞明白怎么将读取的数据重新放回缓冲区。好的

是在我采取这个方案之前我想到了更好的办法:

第三个办法:

*将结尾判断改一下直接上图,待会解释原理

我对这个函数做了两处改动,第一个和第三个箭头。

第一个改动是把Enter键改成了q键,因为回车会刷新缓冲区,而scanf()函数一直在等待一个数字,

所以在一开始狂按回车是没用的,解决方案就是把回车换成一个字符(q可以代表quit,所以用q,

其他字符也可以)。程序遇到用户输入的q时,图片中函数里的u等于0,所以退出whlie语句。

第二个改动是在两个while语句之间加了一个getchar(),他的作用是:当用户输入q时,第一个while

里面的scanf函数是没有读取到这个q的,,如果没有这个getchar,那么用户输入的q将由第二个

scanf函数来读取。这样第二个while 语句就不会运行。

这样,程序就能满足输入为空表的情况了。

最新文章

  1. 【推荐】CentOS安装Tomcat-7.0.57+启动配置+安全配置+性能配置
  2. NOIP2000单词接龙[DFS]
  3. Windows Phone Foreground Toast
  4. cat常用参数详解
  5. 普林斯顿结构 VS 哈佛结构
  6. zw版_zw中文增强版Halcon官方Delphi例程
  7. JSAPI_Ticket签名
  8. ZeroR-baseline分类器
  9. MTD设备驱动
  10. Springboot 入门之Hello World
  11. NYOJ-1057 寻找最大数(三)(贪心)
  12. python实例编写(1)--浏览器操作,元素操作
  13. 《从Paxos到Zookeeper:分布式一致性原理与实践》【PDF】下载
  14. 从集合的无序性看待关系型数据库中的"序"
  15. nginx location的命中过程
  16. android布局##TableLayout和FrameLayout-android学习之旅(十五)
  17. 创建servlet的三种方式
  18. Python 爬虫 当当网图书 scrapy
  19. 启动Cognos时报0106错误
  20. Mybatis自定义SQL拦截器

热门文章

  1. Tcl模块化
  2. Java 程序流程语句
  3. oracle之case
  4. Java并发包线程池之ScheduledThreadPoolExecutor
  5. 一个漂亮的输出MySql数据库表结构的PHP页面
  6. Greenwich.SR2版本的Spring Cloud Ribbon实例
  7. 算法习题---4-5IP网络(Uva1590)
  8. Qt编写自定义控件53-自定义宽高下拉框
  9. pycharm连接linux创建django工程
  10. .Net Core 定时器Quartz