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
    评论
### 回答1: 以下是使用 C 语言代码实现该功能的示例: ``` #include <stdio.h> int main(void) { int year; printf("请输入年份:"); scanf("%d", &year); if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { printf("0\n"); } else { printf("1\n"); } return 0; } ``` 该代码提示用户输入一个年份,然后判断该年份是否为闰年。如果是闰年,则输出 `0`;否则输出 `1`。 ### 回答2: 使用C语言可以编写一个程序,使其输入为2030,输出为0。 以下是一种可能的解决方案: ```c #include <stdio.h> int main() { int num; printf("请输入一个数: "); scanf("%d", &num); // 判断输入的数是否等于2030,如果等于则输出0,否则输出其他结果 if (num == 2030) { printf("输出为0"); } else { printf("输出为其他结果"); } return 0; } ``` 运行这个程序,会先要求用户输入一个数。如果用户输入的数为2030,则输出为0;如果用户输入的数不为2030,则输出为其他结果。 ### 回答3: C语言是一种编程语言,可以用于计算机程序的开发和编写。如果要利用C语言输入2030,并输出0,可以使用以下代码: ```c #include <stdio.h> int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); if (num == 2030) { printf("输出:0\n"); } return 0; } ``` 以上代码使用了`scanf`函数来从用户输入获取一个整数,并将该整数存储在`num`变量中。接下来,使用条件判断语句`if`来判断`num`是否等于2030。如果是,就输出0。 在程序运行,会先输出提示信息`请输入一个整数:`,然后等待用户的输入。如果用户输入2030,程序会输出`输出:0`;如果用户输入其他任何数,程序不会输出任何内容。 这样就实现了利用C语言输入2030,然后输出0的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

rewriter key

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

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

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

打赏作者

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

抵扣说明:

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

余额充值