先上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
int a;
int b;
char c;
printf("请输入a的值\n");
scanf("%d", &a);
printf("请输入b的值\n");
scanf("%d", &b);
printf("请输入运算符\n");
scanf("%c", &c);
printf("运算结果");
yunsuan(a, b, c);
return 0;
}

看起来是没有问题的,但是在运行的时候,运算符没有让我输入直接跳过了。

img

这到底怎么回事呢?

首先我们了解一下scanf()是怎么接受数据的。

当执行scanf这句的时候,系统并不是等待用户输入,而是判断输入缓冲区有没有符合格式的内容,如果有的话,则直接读取。

所以scanf(“%c”,&c);并不是没有读到数据,而是读到了我们不知道的数据。

那么它到底读到了什么了?

这就要说到行缓存了。

我们用scanf()的时候都要按下enter键,那enter键按了之后去哪儿了?

答案是enter键也进入了输入缓存区,我们都知道enter键是换行的,也就是’/n’,所以也就是scanf(“%c”,&ch);读到了’\n’;

解决办法

很简单,既然缓存区有东西,那我们就清空它。

在 scanf(“%c”,&ch); 前面加上setbuf(stdin,NULL);(这个windows和linux下都可以),

或者fflush(stdin);(这个只能windows);

我们再运行一下程序

img

这样我们就可以轻松秒杀!

参考链接:https://blog.csdn.net/zy799894671/article/details/7757764