fflush函数小结
时间:2010-06-20 来源:yjfx77
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)
对输入缓冲区清空还可以用
do { int c = getc(); } while ( c != EOF && c != "\n ");
flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
#i nclude <stdio.h >
void main()
{
int a,b,c,d;
fflush(stdin); // 单在这个程序里面,这句话是不起任何作用的,fflush(stdin)是一个未定义行为,也就是在标准c里面并没有规定有这样的用法,但是有的编译器内 定了这样也是合法的,比如vc,而在有的编译器下这就可能是一条错误的语句,比如gcc。所以这样写并不是一种好的习惯。你可以把这条语句换 成:while(getchar() != "\n ") ;
scanf("%d%d%d",&a,&b,&c);
if(a > b)
d = a;
else
d = b;
if(c > d)
d = c;
printf("%d\n",d);
fflush(stdout);
}
这样的一个问题。
假如输入的不是3个而是大于3个时候,是不是要清空缓冲区呢?// 如果是想把多余的输入清除的话,那就应该在输入语句之后加一条 while(getchar() != "\n ") ;这样可以保证,输入缓冲区中只有三个数。
输出的时候是不是也要清空一下呢?// 这个到是很少用
#i nclude <stdio.h >
void main()
{
int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);
while (getchar () != "\n ") // 吃掉多余的输入
{
;
}
if(a > b)
d = a;
else
d = b;
if(c > d)
d = c;
printf("%d\n",d);
}
函数原型:int fflush( FILE *stream );
Return Value
fflush returns 0 if the buffer was successfully flushed. The value 0 is also returned in cases in which the specified stream has no buffer or is open for reading only. A return value of EOF indicates an error.
Note If fflush returns EOF, data may have been lost due to a write failure. When setting up a critical error handler, it is safest to turn buffering off with the setvbuf function or to use low-level I/O routines such as _open, _close, and _write instead of the stream I/O functions.
Parameter
stream
Pointer to FILE structure
例子:
/* FFLUSH.C */
#i nclude <stdio.h>
#i nclude <conio.h>
void main( void )
{
int integer;
char string[81];
/* Read each word as a string. */
printf( "Enter a sentence of four words with scanf: " );
for( integer = 0; integer < 4; integer++ )
{
scanf( "%s", string );
printf( "%s\n", string );
}
/* You must flush the input buffer before using gets. */
fflush( stdin );
printf( "Enter the same sentence with gets: " );
gets( string );
printf( "%s\n", string );
}
Output
Enter a sentence of four words with scanf: This is a test
This
is
a
test
Enter the same sentence with gets: This is a test
This is a test