当前位置:首页 » 编程语言 » c语言中fflush
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中fflush

发布时间: 2022-07-22 14:37:01

A. c语言fflush函数

fflush功能:清除读写缓冲区。

fflush(stdin)是用来清空输入缓冲区,通常是为了确保不影响后面的数据读取,
例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin)。
但要注意的是,此函数仅适用于部分编译器(如VC6),
但是并非所有编译器都要支持这个功能(如gcc4.6)。
这是一个对C标准的扩充。

B. C语言fflush(stdin);的用法

首先请看以下程序:
#include <stdio.h>
int main( void )
{
int i;
for (;;)
{

fputs("Please input an integer: ", stdout);
scanf("%d", &i);
printf("%d\n", i);
}
return 0;
}

这个程序首先会提示用户输入一个整数,然后等待用户输入,如果用户输入的是整数,程序会输出刚才输入的整数,并且再次提示用户输入一个整数,然后等待用户输入。但是一旦用户输入的不是整数(如小数或者字母),假设 scanf 函数最后一次得到的整数是 2 ,那么程序会不停地输出“Please input an integer: 2”。这是因为 scanf("%d", &i); 只能接受整数,如果用户输入了字母,则这个字母会遗留在“输入缓冲区”中。因为缓冲中有数据,故而 scanf 函数不会等待用户输入,直接就去缓冲中读取,可是缓冲中的却是字母,这个字母再次被遗留在缓冲中,如此反复,从而导致不停地输出“Please input an integer: 2”。

也许有人会说:“居然这样,那么在 scanf 函数后面加上‘fflush(stdin);’,把输入缓冲清空掉不就行了?”然而这是错的!C和C++的标准里从来没有定义过 fflush(stdin)。也许有人会说:“可是我用 fflush(stdin) 解决了这个问题,你怎么能说是错的呢?”的确,某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲,但是并非所有编译器都要支持这个功能(linux 下的 gcc 就不支持),因为标准中根本没有定义 fflush(stdin)。MSDN 文档里也清楚地写着fflush on input stream is an extension to the C standard(fflush 操作输入流是对 C 标准的扩充)。当然,如果你毫不在乎程序的移植性,用 fflush(stdin) 也没什么大问题。以下是 C99 对 fflush 函数的定义:

int fflush(FILE *stream);

如果 stream 指向输出流或者更新流(update stream),并且这个更新流

最近执行的操作不是输入,那么 fflush 函数将把这个流中任何待写数据传送至

宿主环境(host environment)写入文件。否则,它的行为是未定义的。

原文如下:

int fflush(FILE *stream);

If stream points to an output stream or an update stream in which

the most recent operation was not input, the fflush function causes

any unwritten data for that stream to be delivered to the host environment

to be written to the file; otherwise, the behavior is undefined.

其中,宿主环境可以理解为操作系统或内核等。

由此可知,如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用 fflush(stdin) 是不正确的,至少是移植性不好的。

C. 在C语言编程中什么时候需要用fflush(stdin)

fflush函数刷新一个流,可以用来防止内存地址已经占满,当把这个流指向用户标准输入(stdin)时,可以清除目前缓冲区中的内容,输入回车也会被清楚掉,例如,在scanf()之后使用fflush(stdin)是当输入缓冲区(内存)满了的时候,自动清除输入流缓冲区中所有数据,其实现在内存这么大,每次输入的数据只有几个字节,是几乎用不上的,多用上的地方是在嵌入式开发上面,因为每个固化芯片上一般只有几十K的空间,所以空间显得非常重要,此时就要用上了

D. 关于C语言的fflush()

fflush作用在清空Buffer, 但是标准中只有定义output, 对input无定义. 可能有作用, 可能没作用, 依照编译器会如何实作而定.

E. c语言sys()fflush()用法

fflush(stdin)
;
清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)
sys()这个函数在C语言中不存在,我猜你说的是system()函数,这个函数可以执行系统命令,如:
system("pause");表示执行到此处要暂停,等待按任意键继续执行。
system("cls");表示清屏。

F. C语言 fflush(stdin)是什么意思

fflush(stdin)中stdin是标准输入的意思。
fflush(stdin)的作用是清空标准输入缓冲区。
举例说明如下:
int a;
char c;
scanf("%d",&a);
fflush(stdin); // 清空输入缓冲区
scanf("%c",&c);如果不加fflush(stdin)的话,第一次输入的回车可能会被第二次输入操作所捕捉,也即变量c的值将会是回车符,并不会接收用户输入的字符。

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

这个函数其实很简单,都是编程的软件搞的.
比如在DevC中,程序跑完以后编译软件的处理是直接将程序关闭,这时候我们是无法看到运行的结果的,需要手动设置让它停下来,比如用system("pause");或者是getchar(); 大多数书上选择的是后者,这样程序到这一步就会停下来等你按一个键.不过麻烦的是这个被读到缓冲区里的数还在,如果后面还有用到的话,就会有问题,这时候就需要用fflush()来清理一下.
说白了就是坏习惯搞出来的一个玩意,就像个回收站,里面有东西而又需要用它的时候,调用fflush()倒一次垃圾,就行了
全部手打...累死了.......

H. C语言中“fflush(stdin)”的作用是什么

清除标准输入设备(一般是键盘)的缓存

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)。

flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。