C语言fflush(stdin)函数是什么意思,在什么情况下用它

我在有些C程序中见到fflush(stdin),不知道它是干什么用的,请问在什么情况下用它?另外,本人的联想能力也挺丰富的,本人想既然有fflush(stdin),那是否... 我在有些C程序中见到fflush(stdin),不知道它是干什么用的,请问在什么情况下用它?另外,本人的联想能力也挺丰富的,本人想既然有fflush(stdin),那是否也有fflush(stdout)?如果有,它又是干什么用的? 展开
 我来答
爱教育爱学习
高粉答主

2019-08-29 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112724

向TA提问 私信TA
展开全部

1、fflush(stdin)是清空输入缓冲区的意思。stdin就是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 一般就是指键盘输入到缓冲区里的东西。

2、在清除文件缓冲区时使用,文件以写方式打开时将缓冲区内容写入文件。

例:

#include <conio.h>

#include <io.h>

#include <stdio.h>

#include <string.h>

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("\nFile 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)

性凡雁习莲
游戏玩家

2019-06-08 · 非著名电竞玩家
知道大有可为答主
回答量:9901
采纳率:25%
帮助的人:763万
展开全部
1.fflush函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件。
2.函数原型:int
fflush(FILE
*stream)
;
3.函数功能:清除一个流,即清除文件缓冲区,当文件以写方式打开时,将缓冲区内容写入文件。也就是说,对于ANSI
C规定的是缓冲文件系统,函数fflush用于将缓冲区的内容输出到文件中去。
4.函数返回值:如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。
5.下面给出一个具体的例子来演示该函数使用的方法:
#include
<stdio.h>
#include
<stdlib.h>
int
main(void){
FILE
*fp;
if((fp=fopen("test",
"rb"))==NULL)
{
printf("Cannot
open
file.\n");
exit(1);
}
char
ch
=
'C';
int
i;
for(i=0;
i<5;
i++)
{
fwrite(ch,
sizeof(ch),
1,
fp);
fflush(fp);
}
fclose(fp);
return
0;
}
注意:如果在写完文件后调用函数fclose关闭该文件,同样可以达到将缓冲区的内容写到文件中的目的,但是那样系统开销较大。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luckydmz
2006-08-25 · TA获得超过593个赞
知道小有建树答主
回答量:675
采纳率:0%
帮助的人:414万
展开全部
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标注输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嬴芦野飞捷
2020-05-05 · TA获得超过1090个赞
知道小有建树答主
回答量:614
采纳率:100%
帮助的人:3.1万
展开全部
这是用来清除输入后的缓存数据的,比如你写个程序只允许输入数字,然后就可以循环,如果你这时输入了一个字符,这时一个字符就是非法得了,一直保留在缓存空间里,如果不处理掉可能会照成死循环…这时你就可以用这个代码清除缓存…
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mlper_
推荐于2017-10-01 · TA获得超过8016个赞
知道大有可为答主
回答量:4863
采纳率:78%
帮助的人:1197万
展开全部
1.fflush函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件。
2.函数原型:int fflush(FILE *stream) ;
3.函数功能:清除一个流,即清除文件缓冲区,当文件以写方式打开时,将缓冲区内容写入文件。也就是说,对于ANSI C规定的是缓冲文件系统,函数fflush用于将缓冲区的内容输出到文件中去。
4.函数返回值:如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。
5.下面给出一个具体的例子来演示该函数使用的方法:
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
if((fp=fopen("test", "rb"))==NULL) {
printf("Cannot open file.\n");
exit(1);
}
char ch = 'C';
int i;
for(i=0; i<5; i++) {
fwrite(ch, sizeof(ch), 1, fp);
fflush(fp);
}
fclose(fp);
return 0;
}
注意:如果在写完文件后调用函数fclose关闭该文件,同样可以达到将缓冲区的内容写到文件中的目的,但是那样系统开销较大。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式