tpdddP 发表于 2022-4-3 12:20

使用Dev C++学C语言发现了一个奇怪的问题

本帖最后由 tpdddP 于 2022-4-3 13:39 编辑

代码如下:
#include<stdio.h>

int main()
{
      int a;
      char b;
      printf("输入数字a:\n");
      scanf("%d",&a);
      printf("输入字符b:\n");
      scanf("%c",&b);
      printf("数字a为:%d\n字符b为:%c",a,b);
      return 0;
}

结果如下:
输入数字a:
1
输入字符b:
数字a为:1
字符b为:

--------------------------------
Process exited after 0.9337 seconds with return value 0
请按任意键继续. . .
我敲下1再按回车,按道理应该打印“输入字符b:”,然后程序暂停,等待我输入字符后回车再继续,可是为什么这个编译器在我输入1后回车就执行剩下的代码呢?根本没有给我输入字符b的机会。
更奇怪的是,我把代码改成这样。
#include<stdio.h>

int main()
{
      int a,b;
      //char b;
      printf("输入数字a:\n");
      scanf("%d",&a);
      printf("输入数字b:\n");
      scanf("%d",&b);
      printf("数字a为:%d\n数字b为:%d",a,b);
      return 0;
}

在我输入1后回车,程序打印出"输入数字b:”后程序暂停,等待我输入数字。并不是像刚才那样直接执行剩下的代码。
求助论坛的hxd们,是什么问题呢?

我心飞翔1995 发表于 2022-4-3 12:33

在C语言中连续使用scanf()函数出现的问题_东飞儿的博客-CSDN博客_连续使用scanf
https://blog.csdn.net/PyDongJava/article/details/84572002

cocoan 发表于 2022-4-3 13:11

本帖最后由 cocoan 于 2022-4-3 13:38 编辑

需要再去学习一下输入语句,尤其是它的工作原理的知识了解。这里我引用一点说明一下,后续还要自己去找资料看的。
scanf()是行缓冲区工作,当遇到 scanf() 函数时,程序会先检查输入缓冲区中是否有数据,以第1段程序为例,此时缓冲区为空,如果是空的,就等待用户输入,直到按下回车(换行符\n)输入结束,比如执行第一个scanf()时,输入1,按回车,此时变量a保存1,缓冲区还剩余一个\n,下一个scanf()在执行时,发现缓冲区中有内容,又符合控制字符串的格式,接收\n,结束。

jamesAbc 发表于 2022-4-3 17:01

因为你的缓冲区没有清空
页: [1]
查看完整版本: 使用Dev C++学C语言发现了一个奇怪的问题