C语言 fflush函数用法

作者&投稿:麻窦 (若有异议请与网页底部的电邮联系)
C语言中“fflush(stdin)”的作用是什么?~

清除标准输入设备(一般是键盘)的缓存。

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)。

flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。

1、fflush(stdin)是清空输入缓冲区的意思。stdin就是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 一般就是指键盘输入到缓冲区里的东西。
2、在清除文件缓冲区时使用,文件以写方式打开时将缓冲区内容写入文件。
例:
#include
#include
#include
#include
void flush(FILE *stream);
int main(void)
{
FILE *stream;
char msg[] = "This is a test";
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* write some data to the file */
fwrite(msg, strlen(msg), 1, stream);
clrscr();
printf("Press any key to flush DUMMY.FIL:");
getch();
/* flush the data to DUMMY.FIL without closing it */
flush(stream);
printf("
File was flushed, Press any key to quit:");
getch();
return 0;
}
void flush(FILE *stream)
{
int duphandle;
/* flush the stream's internal buffer */
fflush(stream);
/* make a duplicate file handle */
duphandle = dup(fileno(stream));
/* close the duplicate handle to flush the DOS buffer */
close(duphandle);
}

扩展资料
使用fflush的注意事项
1、MSDN 文档里也清楚地写着:fflush on input stream is an extension to the C standard (fflush 操作输入流是对C标准的扩充)。以下是 C99 对 fflush 函数的定义:int fflush(FILE *stream);
2、如果stream指向输出流或者更新流(update stream),并且这个更新流最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream指向的文件(如标准输出文件stdout)。
3、fflush函数的行为是不确定的。fflush(NULL)清空所有输出流和上面提到的更新流。如果发生写错误,flush函数会给那些流打上错误标记,并且返回EOF,否则返回0。
4、如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用 fflush(stdin) 是不正确的。
参考资料来源:百度百科—fflush(stdin)

fflush(stdin); 清空输入缓冲区。
你的问题 是 统计用的计数器要清0,与 fflush 无关。
把 fflush(stdin);
改为: letter=0;number=0;space=0;others=0;


加查县15238596317: c语言sys()fflush()用法 -
段雍格芬: fflush(stdin) ; 清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);) sys()这个函数在C语言中不存在,我猜你说的是system()函数,这个函数可以执行系统命令,如:system("pause");表示执行到此处要暂停,等待按任意键继续执行.system("cls");表示清屏.

加查县15238596317: c语言中的fflush(stdin)到底怎么用?我查了好多资料,但一直不知道什么时候该用什么时候不 -
段雍格芬: 在输入单个字符(scanf("%c", &ch) 或getchar())前或使用gets()函数前,加fflush(stdin) ;清除缓存中的垃圾数据,使得程序可以正确输入你想输入的数据

加查县15238596317: fflush函数怎么用? -
段雍格芬: 你写错了,是stdin.而且fflush加在输入流上其行为未定义.fflush的主要功能,是强制有缓冲区的流立即将缓冲区内容写入文件.

加查县15238596317: 有关于c语言中fflush(stdin)的使用方法,我看了书本几个范例,始终不明白fflush(stdin)的用法 -
段雍格芬: 这个函数其实很简单,都是编程的软件搞的.比如在DevC中,程序跑完以后编译软件的处理是直接将程序关闭,这时候我们是无法看到运行的结果的,需要手动设置让它停下来,比如用system("pause");或者是getchar(); 大多数书上选择的是后者,这样程序到这一步就会停下来等你按一个键.不过麻烦的是这个被读到缓冲区里的数还在,如果后面还有用到的话,就会有问题,这时候就需要用fflush()来清理一下.说白了就是坏习惯搞出来的一个玩意,就像个回收站,里面有东西而又需要用它的时候,调用fflush()倒一次垃圾,就行了 全部手打...累死了.......

加查县15238596317: C语言fflush(stdin)函数是什么意思,在什么情况下用它我在有些C程序中见到fflush(stdin),不知道它是干什么用的,请问在什么情况下用它?另外,本人的联... -
段雍格芬:[答案] 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 没有你后面说的那个. 例子: #include #include #include #include voidflush(FILE*stream); intmain(void) { FILE*stream; charmsg[]="Thisisatest"; str...

加查县15238596317: 在C语言编程中什么时候需要用fflush(stdin)? -
段雍格芬: fflush函数刷新一个流,可以用来防止内存地址已经占满,当把这个流指向用户标准输入(stdin)时,可以清除目前缓冲区中的内容,输入回车也会被清楚掉,例如,在scanf()之后使用fflush(stdin)是当输入缓冲区(内存)满了的时候,自动清除输入流缓冲区中所有数据,其实现在内存这么大,每次输入的数据只有几个字节,是几乎用不上的,多用上的地方是在嵌入式开发上面,因为每个固化芯片上一般只有几十K的空间,所以空间显得非常重要,此时就要用上了

加查县15238596317: C语言fflush(stdin)函数是什么意思,在什么情况下用它 -
段雍格芬: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 没有你后面说的那个. 例子: #include#include#include#includevoid flush(FILE *stream); int main(void) { FILE *stream; char msg[] = "This is a test"; stream = fopen("DUMMY....

加查县15238596317: c语言中有没有这样的库函数,作用是清除cache中的内容 -
段雍格芬: fflush() ;清除标准输入缓存. 函数名: fflush 功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 原型:int fflush(FILE *stream) 程序例: #include <string.h> #include <stdio.h> #include <conio.h> #include <io.h> void flush(...

加查县15238596317: 本人有关几个c语言函数不懂~!!在线等~~~ -
段雍格芬: 简单的说明下fflush(stdin)fflush(stdin)表示清除键盘缓存具体用法如下:#include "stdio.h"void main(){ char a,b; a=getchar(); fflush(stdin); b=getchar(); printf("a=%c b=%c",a,b);}如果这个程序中没有fflush(stdin)比如输入字符s然后回车!想继续输入的时候你会发现程序已经直接输出结果了!因为系统已经把你输入的回车当成一个字符赋给b了!

加查县15238596317: fflush(stdin)函数的作用是什么?
段雍格芬: 应该叫做 清除输入设备的缓冲区 一般情况下,是用来清除键盘输入的. 如果你用过scanf,那么它总会有个回车无法读入,而且会影响下次的正常读取, 这时,一般就用fflush(stdin)来清除这个回车.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网