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也就此解决了,希望宝宝们以后遇到类似的情况能知道是什么原因,最后,还是希望宝宝们能点赞加关注,我会持续更新内容.

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪雨123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值