小伙伴们是不是有时会有这样的疑惑。
明明输入了两个scanf指令为什么却只有一个被执行呢?改了又改却还是不行。
如下:
#include <stdio.h>
int main()
{
int a;
char b;
scanf("%d",&a);
scanf("%c",&b);
printf("%d%c",a,b);
return 0;
}
输入了123就按下回车却得到了这样的结果
哎?为什么我们的第二个scanf指令没有被执行呢?
今天我就和现在的小伙伴们有一样的困扰,在查阅了大量资料后也是终于恍然大悟,这一切的罪魁祸首就是——缓冲区!
我们通过scanf输入的数据并不会直接被录入,而是会先存储到缓冲区中,之后再从缓冲区中读取到我们定义的变量中。
所以这里的原因也就浮出水面了,我们输入123后就需要回车来使这一操作结束,但是回车又会被读取到缓冲区中(注意这里%d是不会被回车影响的,但是%c却会读取这一类数据),所以这里我们的第二个scanf就会被跳过了。
这里是我给出的两个解决办法:
#include <stdio.h>
int main()
{
int a;char b;
scanf("%d",&a);
getchar();
scanf("%c",&b);
printf("%d%c",a,b);
return 0;
}
方法一就是通过getchar()来吃掉缓冲区中的一个回车,这样就不会对后续操作造成影响。
然后
scanf("%d",&a);
fflush(stdin);
scanf("%c",&b);
方法二就是通过fflush(stdin)来清除缓冲区,从而达到我们想要的效果。
这两个方法个人比较建议第一种,不过小伙伴们还是根据自己的需要来选取哈哈。
那么就到这里喽!希望今天的内容可以对小伙伴们有所帮助喔,制作不易求个点赞关注呜呜呜,我会继续分享日常遇到的解决问题的小技巧的呜呜呜(╥ω╥`) 。