C语言里为什么要用到fflush(stdin);?

来源:百度知道 编辑:UC知道 时间:2024/05/02 20:09:21
各位大侠好!~本小菜鸟又再次迷惑希望各位大侠前来指教~
我在看书上putchar()函数的例题时看到有fflush(stdin);
这句话~问了很多朋友~朋友都说是清空缓存的意思...可是还是很迷惑,
清空缓存是做什么???
#include<stdio.h>
void main()
{
char a,b,c
printf("请输入字符: \n");
a=getchar() //没有输入fflush(stdin);
b=getchar()
c=getchar()

putchar(a);
putchar(b);
putchar(c);
putchar('\n');
}
/*结果运行时本来我的变量是三个数a,b,c可是我只能打出两个数a,b直接就把ab的结果显示了~为什么我声明的变量是三个~在没有清空缓存后运行时就只能打a,b而直接显示结果.

怕有的大侠没听明白在多说一点~!
我要问的问题不是为什么只能打a,b~别大侠给我来句把fflush(stdin);这句话打上就好了- -
我想问的是fflush(stdin);为什么加上这句话后就可以打出我声明的3个变量了~没打为什么就只出2个变量.
由于本人理解能力较差希望各位大侠辛苦些回答得详细些比较好理解些~在此感谢!~

首先要明白,从键盘输入的数据会先存到缓冲区,然后在存放到内存中。但是数据存放到内存中之后,缓冲区的数据并没有释放。如果不给电脑一个清空缓冲区的命令就会造成输入无效的情况。所以需要用到fflush(stdin)释放缓冲区。具体在C语言中主要表现在getchar()等从键盘单个或逐个数据读取的函数上。在你接受键盘数据以后,如果你没有用清流函数进行释放内存,那么就有可能导致你开始输入的数据接受不到,而是接受了上上次的数据,所以一般在接收键盘输入的时候都会用到fflush(stdin),虽然有些数据你是可以确定一定能接收到,但是我们为了规范化和避免错误,都会写上fflush(stdin),getchar()之前要加上fflush(stdin)。希望我的回答对你有用!