fclose(stdin)(c语言中fclose是什么意思)
本篇文章给大家谈谈fclose(stdin),以及c语言中fclose是什么意思对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
C语言fflush(stdin)函数是什么意思,在什么情况下用它
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("
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()函数的作用
fflush是一个计算机函数,功能是冲洗流中的信息,该函数通常用于处理磁盘文件。fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。
扩展资料其他用法:
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
printf("。。。。。。。。。。。");后面加fflush(stdout);可提高打印效率
拓展阅读
注意事项
C和C++的标准里从来没有定义过 fflush(stdin)。也许有人会说:“可是我用 flush(stdin)解决了这个问题,你怎么能说是错的呢?”的确,某些编译器(如VC6)支持用 fflush(stdin)来清空输入缓冲,但是并非所有编译器都要支持这个功能(linux下的gcc就不支持,经我的GCC4.6.2测试),因为标准中根本没有定义fflush(stdin)。
MSDN文档里也清楚地写着:
fflush on input stream is an extension to the C standard(fflush操作输入流是对C标准的扩充)。
以下是 C99对 fflush函数的定义:
int fflush(FILE*stream);
如果stream指向输出流或者更新流(update stream),并且这个更新流最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream指向的文件(如标准输出文件stdout)。否则,fflush函数的行为是不确定的。fflush(NULL)清空所有输出流和上面提到的更新流。如果发生写错误,flush函数会给那些流打上错误标记,并且返回EOF,否则返回0。
由此可知,如果 stream指向输入流(如 stdin),那么 fflush函数的行为是不确定的。故而使用 fflush(stdin)是不正确的。
freopen在竞赛怎么用
freopen在竞赛的用法如下:
1、格式:FILE*freopen(constchar*filename,constchar*mode,FILE*stream);2、参数说明:filenme:要打开的文件名。mode:文件打开的模式,和fopen中的模式(r/w)相同。stream:文件指针,通常使用标准流文件(stdin/stdout/stderr)。返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。通过调用freopen,就可以修改标准流文件的默认值,实现重定向。3、使用方法:因为文件指针使用的是标准流文件,因此我们可以不定义文件指针。接下来我们使用freopen()函数以只读方式r(read)打开输入文件slyar.in。freopen(“slyar.in”,“r”,stdin);然后使用freopen()函数以写入方式w(write)打开输出文件slyar.out。freopen(“slyar.out”,“w”,stdout);接下来的事情就是使用freopen()函数的优点了,我们不再需要修改scanf和printf,而是维持代码的原样就可以了。因为freopen()函数重定向了标准流,使其指向前面指定的文件。最后只要使用fclose关闭输入文件和输出文件即可。fclose(stdin);fclose(stdout);若要恢复句柄,可以重新打开标准控制台设备文件,只是这个设备文件的名字是与操作系统相关的。DOS/Windows:freopen(“CON”,“r”,stdin);Linux:freopen(“/dev/console”,“r”,stdin)。
以上就是freopen在竞赛的用法。
OK,本文到此结束,希望对大家有所帮助。