关于C语言中scanf("%c",&c)直接跳过的问题
先上代码
1 | int main() |
看起来是没有问题的,但是在运行的时候,运算符没有让我输入直接跳过了。
这到底怎么回事呢?
首先我们了解一下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);
我们再运行一下程序
这样我们就可以轻松秒杀!
参考链接:https://blog.csdn.net/zy799894671/article/details/7757764
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 鱼仔的博客!
评论