有关于c语言中fflush(stdin)的使用方法,我看了书本几个范例,始终不明白fflush(stdin)的用法

希望高手可以帮我解答一下,什么时候用。我看书本的范例的时候,很多时候觉得应该用的时候书本没有用,真的搞不清楚这个函数的用法,请高手教教,最后具体详细点... 希望高手可以帮我解答一下,什么时候用。我看书本的范例的时候,很多时候觉得应该用的时候书本没有用,真的搞不清楚这个函数的用法,请高手教教,最后具体详细点 展开
 我来答
漏网之YU
推荐于2018-04-15 · TA获得超过117个赞
知道答主
回答量:31
采纳率:0%
帮助的人:39.4万
展开全部
这个函数其实很简单,都是编程的软件搞的.
比如在DevC中,程序跑完以后编译软件的处理是直接将程序关闭,这时候我们是无法看到运行的结果的,需要手动设置让它停下来,比如用system("pause");或者是getchar(); 大多数书上选择的是后者,这样程序到这一步就会停下来等你按一个键.不过麻烦的是这个被读到缓冲区里的数还在,如果后面还有用到的话,就会有问题,这时候就需要用fflush()来清理一下.
说白了就是坏习惯搞出来的一个玩意,就像个回收站,里面有东西而又需要用它的时候,调用fflush()倒一次垃圾,就行了
全部手打...累死了.......
hong83210
2011-04-05 · TA获得超过481个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:312万
展开全部
fflush(stdin) ; 清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);) 详细解释一下: /*stdin就是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 一般就是指键盘输入到缓冲区里的东西。 */ 函数名: fflush 功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 原型:int fflush(FILE *stream) 程序例: #include <string.h> #include <stdio.h> #include <conio.h> #include <io.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 的返回值类型是int类型,那么这个int类型具体的返回是什么呢? 返回值: 如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。 注意:如果fflush返回EOF,数据可能由于写错误已经丢失。当设置一个重要错误处理器时,最安全的是用setvbuf函数关闭缓冲或者使用低级I/0例程,如open、close和write来代替流I/O函数。 #include <stdio.h> int main() { int i=0; char p; scanf("%d",&i); 问题点---> fflush(stdin); printf("I is :%d\n",i); scanf("%c",&p); printf("Char P is %c.\n",p); return 0; } 该程序在dev-c++下编译执行后 2 <enter> I is :2 a <enter> Char P is a. 在linux下编译执行后 2 <enter> I is :2 Char P is . 很明显fflush在linux下没有起到任何作用?请问我错在哪里了?我要怎样清流?当然在linux下我把fflush(stdin);换成getchar();可以达到效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
敛正雅7f
2011-04-05 · TA获得超过2030个赞
知道大有可为答主
回答量:1553
采纳率:0%
帮助的人:1744万
展开全部
在c语言中使用scanf()函数在键盘上接受字符型数据时,必须用fflush(stdin)这个来清楚上一次存储的数据,不然字符型数据不会正确的存储.

为确保下次输入是地,不出现读取之前的回车符错误,可以选择用fflush(stdin)函数刷新缓冲区

参考资料: http://blog.csdn.net/guxue365/archive/2007/12/07/1921797.aspx

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
j1jen8acn
2011-04-05 · TA获得超过287个赞
知道答主
回答量:513
采纳率:100%
帮助的人:0
展开全部
入流没有flush()方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式