c语言报错笔记:使用scanf(“%d\n“, &x)时遇到的错误

一、问题描述

  在学习b站鹏哥c语言时跟着做三子棋的项目在使用scanf()函数时遇到了出乎意料的问题,图片如下:

  问题一共有两个:

  (1)在一开始需要输入两次1才能继续执行程序

  (2)输入坐标2 2时,本应在坐标2行2列位置填充*号,但输出结果却显示在1行2列

二、问题思考

  这就让我百思不得其解了,怎么会出现这种问题呢?于是我监视了x,y变量:

  可以看到在左侧的变量监视窗口中x的值确实为1。从结果来看应该是缓存区中的1未被及时读取,而是被Playermove中的scanf读取了。

  于是我询问了同学,提出应该是scanf("%d\n")中,加上了换行符\n,这样会导致scanf尝试读取并匹配输入中的换行符,直到输入非空白字符为止(输入另一个非空白字符后scanf会进行下一次读取)。所以为什么程序一开始输入第一个1再按下回车时程序不会立即执行呢?并且缓冲区中的1是怎么遗留下来的?

 希望有大佬能解答下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

rewriter key

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

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

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

打赏作者

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

抵扣说明:

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

余额充值