C语言中flushall()和fflush(stdin)有什么区别?

作者&投稿:藤杜 (若有异议请与网页底部的电邮联系)
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)

flushall将刷新所有打开的输入设备,包括标准设备和文件设备,fflush(stdin)只刷新标准输入。


苏州市17291538366: c语言中,flushall()有什么作用 -
涂贤富马: flushall将刷新所有打开的输入设备,包括标准设备和文件设备,fflush(stdin)只刷新标准输入.

苏州市17291538366: C语言中的flushshall语句的作用,以及他的相似语句. -
涂贤富马: 是不是flushall()?参考:http://baike.baidu.com/view/656661.htm

苏州市17291538366: C语言中如何清空输入输出缓冲区 -
涂贤富马: fflush(stdin) 或者: flushall()

苏州市17291538366: c语言程序里的flushall( )函数在哪个头文件里? -
涂贤富马: stdio.h

苏州市17291538366: 【C语言】gets和puts还有scanf和printf搭配使用 -
涂贤富马: #include<stdio.h> int main() { char a[50]={0}; int l, h; printf("输入长和高:"); scanf("%d%d", &l, &h);printf("输入字符串a="); flushall();//清空缓冲区 gets(a); puts(a); return 0; }这样就可以了.非格式化输入,字符和字符串的输入会受到前次输入缓冲区的影响,因此在gets、getchar等接收字符输入前,应该清空缓冲区.

苏州市17291538366: C语言中不用fflushstdin用什么来清空缓存
涂贤富马: flushall(); 存在于<stdio.h >头文件

苏州市17291538366: C语言:键盘输入10个数存入数组中,将这10个数逆序输出 -
涂贤富马: 这是你要求的程序,我已经通过vc调试运行通过了 #include<stdio.h> void main() {int i=0,array[10];for(i=0;i<10;i++){printf("输入第%d个数:",i+1);scanf("%d",&array[i]);flushall();}printf("逆序输出为:\n");for(i=9;i>=0;i--)printf("%d\t",array[i]);printf("\n"); }

苏州市17291538366: C语言程序中gets()怎老是在执行时自动跳过不接受输入? -
涂贤富马: 这是一个字符串回车键重复读取问题,第一个字符串接收以后,可能在键盘的缓冲区里面还保存一个回车换行之类的键符. 解决办法是: 在新的读取之前,先输出一行键盘输入提示符.在提示符之前,在添加一句键盘缓冲区清除语句.清除键...

苏州市17291538366: C语言关于flushall()和getchar(). -
涂贤富马: 在输入C1后的回车,需要释放掉,否则会被继续读入

苏州市17291538366: c语言这程序一运行就停止工作 -
涂贤富马: 已经帮你完善,以下是代码#include #include #include int wrong=0,right=0; void geta(int a[],int b[],int n) { int i,j; srand(time(NULL)); for(i=0;i a[i]=rand()%100; for(j=0;j b[j]=rand()%100; } void print1() { printf(" 小学生算术自测\n"); printf("**********...

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