有关于c语言中fflush(stdin)的使用方法,我看了书本几个范例,始终不明白fflush(stdin)的用法
希望高手可以帮我解答一下,什么时候用。我看书本的范例的时候,很多时候觉得应该用的时候书本没有用,真的搞不清楚这个函数的用法,请高手教教,最后具体详细点...
希望高手可以帮我解答一下,什么时候用。我看书本的范例的时候,很多时候觉得应该用的时候书本没有用,真的搞不清楚这个函数的用法,请高手教教,最后具体详细点
展开
4个回答
展开全部
这个函数其实很简单,都是编程的软件搞的.
比如在DevC中,程序跑完以后编译软件的处理是直接将程序关闭,这时候我们是无法看到运行的结果的,需要手动设置让它停下来,比如用system("pause");或者是getchar(); 大多数书上选择的是后者,这样程序到这一步就会停下来等你按一个键.不过麻烦的是这个被读到缓冲区里的数还在,如果后面还有用到的话,就会有问题,这时候就需要用fflush()来清理一下.
说白了就是坏习惯搞出来的一个玩意,就像个回收站,里面有东西而又需要用它的时候,调用fflush()倒一次垃圾,就行了
全部手打...累死了.......
比如在DevC中,程序跑完以后编译软件的处理是直接将程序关闭,这时候我们是无法看到运行的结果的,需要手动设置让它停下来,比如用system("pause");或者是getchar(); 大多数书上选择的是后者,这样程序到这一步就会停下来等你按一个键.不过麻烦的是这个被读到缓冲区里的数还在,如果后面还有用到的话,就会有问题,这时候就需要用fflush()来清理一下.
说白了就是坏习惯搞出来的一个玩意,就像个回收站,里面有东西而又需要用它的时候,调用fflush()倒一次垃圾,就行了
全部手打...累死了.......
展开全部
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();可以达到效果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在c语言中使用scanf()函数在键盘上接受字符型数据时,必须用fflush(stdin)这个来清楚上一次存储的数据,不然字符型数据不会正确的存储.
为确保下次输入是地,不出现读取之前的回车符错误,可以选择用fflush(stdin)函数刷新缓冲区
为确保下次输入是地,不出现读取之前的回车符错误,可以选择用fflush(stdin)函数刷新缓冲区
参考资料: http://blog.csdn.net/guxue365/archive/2007/12/07/1921797.aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
入流没有flush()方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询