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

一、问题描述

  在学习b站鹏哥c语言时跟着做三子棋的项目在使用scanf()函数时遇到了出乎意料的问题,图片如下:c语言报错笔记:使用scanf(“%d\n“, &x)时遇到的错误_第1张图片

  问题一共有两个:

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

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

二、问题思考

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

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

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

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

 希望有大佬能解答下。

你可能感兴趣的:(c语言)