c语言清空缓冲区
A. c语言中清空缓冲区问题
奇怪的问题!
scanf中*的作用之一是忽略掉指定的内容, 比如 scanf ("%d %*s %d", &i, &k),输入12 aaa 34,执行后i = 12, k = 34, aaa被忽略掉。这个与缓冲区有关系吗?
scanf ("%*”, buf); //这条语句忽略掉输入的任何字符(\n不忽略)。
至于这条语句scanf("%*^[\n]");连\n也忽略掉了, 程序直接终止在scanf,唯一的方法就是发送sigkill信号终止程序了。
B. C语言中如何清空输入输出缓冲区
最简单的是用fflush()函数。
此函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件。
函数原型:int
fflush(FILE
*stream)
;
函数功能:清除一个流,即清除文件缓冲区.
常用场合:
一、ff(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
二、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结
束)。
①
遇空格、“回车”、“跳格”键。
②
遇宽度结束。
③
遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)
三、写文件的时候
不会马上进行物理磁盘的文件读写,而是先写入缓存,当缓存中内容达到一定程度后再写
FILE
*fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
C. C语言中的清空键盘缓冲区的fflusf(stdin)在哪些情况下可以不用
能用到这个函数说明你已经不是入门阶段了,讲起来会轻松一点。在你要按确定的格式读东西,但是键盘缓冲区里可能还有在上次读入后用户按下的其他的按键信息,如果读了这些信息必然得不到正确的输入信息,所以这是要清空键盘缓冲区。有时,在需要忽略用户的部分输入或其他一些情况下也要情况输入缓冲区。 举个例子:你的程序在完成了某个持续一定时间的计算之后,需要用户输入一些信息以进行下一步操作的时候,就要先清空输入缓冲区,再读用户输入信息。因为在你的程序进行上一次运算期间,用户很可能有意无意的按了键盘,(这里请注意按一个键和这个键对应的内容在屏幕上显示出来时两回事)这些按键虽然没有显示出来,但是已经存在了键盘缓冲区中,下一次读入操作会读到这些按键,这并不是我们想要的。
D. C语言中“fflush(stdin)”的作用是什么
清除标准输入设备(一般是键盘)的缓存。
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)。
flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
E. c语言,scanf函数,在输入一个数据时,如何使数据进去缓冲区
关于清空缓冲区,举例如下:
#include<stdio.h>
intmain()
{
intx;
scanf("%d",&x);
fflush(stdin);//清空输入缓冲
scanf("%d",&x);//清空缓冲区后继续输入
printf("%d ",x);
return0;
}
F. C语言中清除缓冲区很重要吗
如果缓冲区是在栈里分配的话是不需要清除的,因为系统会帮你做这个工作,但是如果缓冲区是分配在堆里的话就要自己手动清除了,不然会发生内存泄露,就是虽然不使用,但占用的资源仍然不能释放,会影响系统性能。
清除缓冲区有三种方法:
方法一:
fflush(stdin);
fflush(stdin)在VC上可以使用,但是其他编译器不能保证对fflush的实现。
方法二:
setbuf(stdin, NULL);
setbuf(stdin, NULL);是使stdin输入流由默认缓冲区转为无缓冲区。但缓冲区没有了。
方法三:
char ch;while((ch = getchar()) != '\n' && ch != EOF);
这种方法是最好的方法,因为它使用的是C语言的基本语法,在什么情况都是支持的。
G. C语言 清除缓冲区的非法字符为什么要用while
只是让你方便吧
比如有很多非法字符一次清理不完所以就不断重复
while
loop
直到清除完了
还有很多方法啊比如exception
handing,
recursion
等等
H. C语言中如何清空输入输出缓冲区
最简单的是用fflush()函数。
此函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件。
函数原型:int
fflush(FILE
*stream)
;
函数功能:清除一个流,即清除文件缓冲区.
常用场合:
一、ff(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
二、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结
束)。
①
遇空格、“回车”、“跳格”键。
②
遇宽度结束。
③
遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)
三、写文件的时候
不会马上进行物理磁盘的文件读写,而是先写入缓存,当缓存中内容达到一定程度后再写
FILE
*fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
I. 在C语言编程中什么时候需要用fflush(stdin)
fflush函数刷新一个流,可以用来防止内存地址已经占满,当把这个流指向用户标准输入(stdin)时,可以清除目前缓冲区中的内容,输入回车也会被清楚掉,例如,在scanf()之后使用fflush(stdin)是当输入缓冲区(内存)满了的时候,自动清除输入流缓冲区中所有数据,其实现在内存这么大,每次输入的数据只有几个字节,是几乎用不上的,多用上的地方是在嵌入式开发上面,因为每个固化芯片上一般只有几十K的空间,所以空间显得非常重要,此时就要用上了
J. C语言中清除内存缓冲区的函数是什么
C语言中清除内存缓冲区的函数是fflush(
),清除输入缓冲区用fflush(stdin);
其中stdin表示标准输入。
该函数通常用在输入类函数的前面,用以清除输入缓冲区中的内容,避免接收到上次残留的内容而出错。
举例如下:
1、不加fflush函数:
// 将输入的5个字符存放到数组str中,并输出
int i;
char ch, str[6]={'\0'};
for(i=0; i<5; i++)
{
scanf("%c", &ch);
str[i] = ch;
}
printf("%s\n", str);
// 程序只能输入三个字符(每个字符间包含一个回车符),因为不加fflush函数时,将残留在缓冲区中的回车符也当成了一个字符输入到数组str中。
2、加fflush函数:
int i;
char ch, str[6]={'\0'};
for(i=0; i<5; i++)
{
fflush(stdin); // 清除留在缓冲区中的回车符,确保接收到的是用户输入的字符
scanf("%c", &ch);
str[i] = ch;
}
printf("%s\n", str);
// 程序能正常输出