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
444 1
POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL
POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL
5216 0
|
Ubuntu Linux Shell
手把手教你安装适用于Linux的Windows子系统——Ubuntu
重启完成,你看看重新打开Ubuntu是不是发生了变化,等待几分钟,系统配置完成,根据提示设置用户名和密码即可
|
机器学习/深度学习 人工智能 自然语言处理
详解人工智能(概念、发展、机遇与挑战)
详解人工智能(概念、发展、机遇与挑战)
|
存储 缓存 NoSQL
Spring Cache缓存框架
Spring Cache是Spring体系下的标准化缓存框架,支持多种缓存(如Redis、EhCache、Caffeine),可独立或组合使用。其优势包括平滑迁移、注解与编程两种使用方式,以及高度解耦和灵活管理。通过动态代理实现缓存操作,适用于不同业务场景。
822 0
|
存储 移动开发 JavaScript
网页 HTML 自动播放下一首音乐
在 HTML5 中实现自动播放下一首音乐,通过管理音乐列表、操作音频元素和监听事件完成。创建包含多个音乐链接的列表,使用 `<audio>` 元素加载音乐,监听 `ended` 事件,在当前音乐结束时自动播放下一首。示例代码展示了如何使用 JavaScript 实现这一功能,确保无缝切换音乐。
|
机器学习/深度学习 数据采集 算法
重庆二手房数据爬取与分析实现
本文通过逻辑回归模型对重庆二手房市场数据进行爬取、分析和预测,研究了影响房价的关键变量特征,并提供了数据清洗、可视化和建模的详细步骤,旨在为投资者提供准确的市场趋势预测和投资建议。
493 2
重庆二手房数据爬取与分析实现
|
Prometheus Kubernetes 监控
Kubernetes(K8S) 监控 Prometheus + Grafana
Kubernetes(K8S) 监控 Prometheus + Grafana
918 2
|
存储 编译器 Swift
Swift笔记:Swift中的扩展语法
Swift笔记:Swift中的扩展语法
579 1
|
数据库 OceanBase
OceanBase数据库中,clog和slog文件夹的内容
OceanBase数据库中,clog和slog文件夹的内容
608 1