先观察如下代码和运行情况:
![9987f116bb2d615d78ce66c70195e532.png](https://i-blog.csdnimg.cn/blog_migrate/aef1bf12971f523b4a9a02fa299d3a4c.png)
按照控制台提示,输入 value 的值之后,本该能够按照提示继续输入 choice 的值。但是你会发现程序直接跳过了 choice 的输入。而且 choice 原本的值是 'a',最后变成了换行符(即'n')。
造成这种现象的原因是 C 语言的输入缓冲区的机制。
什么是 C 语言的输入缓冲区呢?
输入分为两种,一种称为无缓冲输入(或直接输入),即你每输入一个字符,程序就读一个字符,并可立即使用这个字符;另一种称为缓冲输入,即将你一次性输入的所有字符先收集并存到缓冲区(buffer)里,在你按下 Enter 键之后将这些字符作为一个“块”全部给到程序。
为什么要使用缓冲区呢?
首先,把若干个字符作为一个块来传输比逐个发送字符更节约时间。其次,如果用户打错了字符,可以在输入区域修正,确认无误后按 Enter 键传入正确的输入。如果你使用的是无缓冲输入,那么一旦你打错字,这个错字符立刻就被传入到程序里了,这个时候想要改正就比较麻烦了。无缓冲输入一般在交互性强的程序里使用(比如实时游戏)。
缓冲分为两类:完全缓冲 I/O 和行缓冲 I/O。完全