C项目(三子棋BUG解决)

简介: C项目(三子棋BUG解决)

各位宝宝好,我是浪雨。之前给大家更新了用了C语言实现三子棋游戏的详细思路和代码,但有些的宝宝可能会发现,在界面提示输入数字选择功能的时候,如果我们不小心输入了英文字母,那么就会导致程序崩溃,陷入死循环,下面是BUG演示图,图中我输入了一个英文字母q,然后程序就循环打印界面(在解决方法后面,我会用简短的代码验证这个BUG,感兴趣的宝宝可以看看)

原因:

造成这个BUG的原因是因为scanf函数在以%d(十进制)格式读取时,不会读取英文字母q,由于input未赋值,里面就存了一个随机值,这个随机值会通过do while循环中while的判断,导致循环一直持续下去,当循环再次来到scanf函数时,输入缓冲区的英文字母q仍无法被读取,就这样程序陷入了死循环。

解决方法:

这里我提供两种解决方法

方法1

在scanf函数后面加入一个getchar()函数,该函数能够吸收掉我输入的英文字母q,这样就会终止循环,让玩家重新选择,如果我们正常输入数字也没问题,因为getchar()会吸收掉我们最后敲的回车,不会影响程序的后续进行.下面是效果演示图

方法2:

这个略微麻烦一些,是我最初想到的办法,就是写一个判断语句,来接收scanf函数的返回值,如果不是按要求输入的,直接exit(0)强制退出程序,并提醒玩家正确操作,具体操作宝宝们可自行尝试

那么各位喜欢哪种方法呢,可评论区讨论.以上就是文章的主要内容,接下来,我将验证这个BUG

验证:

请看如下一段代码

按照我们刚才的分析,假如我输入q23,首先的scanf不会读取q,并且我们没给a赋值,所以此时a里是一个随机值,然后getchar()会吸收掉q,那么在第一次循环中,printf 就会打印出 q和一个随机值,然后进入第二次循环,scanf会直接读取输入缓冲区的23,getchar()会读取我们输入q23时最后敲的回车,然后程序就会换行打印23,分析完,我们让程序跑起来,结果如下.

结果和我们分析的一样,那么到此文章就彻底结束了,这个bug也就此解决了,希望宝宝们以后遇到类似的情况能知道是什么原因,最后,还是希望宝宝们能点赞加关注,我会持续更新内容.

目录
相关文章
接口幂等性注解@RepeatSubmit
接口幂等性注解@RepeatSubmit
354 1
|
4月前
|
Ubuntu Linux Shell
手把手教你安装适用于Linux的Windows子系统——Ubuntu
重启完成,你看看重新打开Ubuntu是不是发生了变化,等待几分钟,系统配置完成,根据提示设置用户名和密码即可
|
10月前
|
存储 移动开发 JavaScript
网页 HTML 自动播放下一首音乐
在 HTML5 中实现自动播放下一首音乐,通过管理音乐列表、操作音频元素和监听事件完成。创建包含多个音乐链接的列表,使用 `<audio>` 元素加载音乐,监听 `ended` 事件,在当前音乐结束时自动播放下一首。示例代码展示了如何使用 JavaScript 实现这一功能,确保无缝切换音乐。
|
机器学习/深度学习 数据采集 算法
重庆二手房数据爬取与分析实现
本文通过逻辑回归模型对重庆二手房市场数据进行爬取、分析和预测,研究了影响房价的关键变量特征,并提供了数据清洗、可视化和建模的详细步骤,旨在为投资者提供准确的市场趋势预测和投资建议。
308 2
重庆二手房数据爬取与分析实现
|
存储 编译器 Swift
Swift笔记:Swift中的扩展语法
Swift笔记:Swift中的扩展语法
415 1
|
数据库 OceanBase
OceanBase数据库中,clog和slog文件夹的内容
OceanBase数据库中,clog和slog文件夹的内容
464 1
|
监控 Ubuntu 安全
在 Ubuntu 服务器上如何启用自动登录?
在 Ubuntu 服务器上如何启用自动登录?
536 0
在 Ubuntu 服务器上如何启用自动登录?
|
网络协议 Java Unix
图解ADB工作原理,建议收藏!
图解ADB工作原理,建议收藏!
1664 0
图解ADB工作原理,建议收藏!
西门子S7-200 SMART运动控制功能,运动轴组态,运动控制程序编写测试
今天我们来介绍一下西门子S7-200 SMART运动控制功能,下面我们先来学习如何使用向导组态运动轴。
西门子S7-200 SMART运动控制功能,运动轴组态,运动控制程序编写测试
|
NoSQL Java Maven
springboot测试Redis连接,启动之后各种报错的解决方案
springboot测试Redis连接,启动之后各种报错的解决方案
springboot测试Redis连接,启动之后各种报错的解决方案