-
C] fflush()Archive/C 2009. 9. 20. 21:29
fflush( stdin );
scanf 를 통하여 abc def 라는 입력을 할 경우,
abc 끝에는 문자열의 끝을 의미하는 null character인 ' \0' 이 삽입된다.
따라서 def 대신 '\0'이 입력되어 버그가 발생"fflush는 버퍼내용을 지울때 사용된다!"라고 생각 하고 있었다.
fflush 란 버퍼의 내용을 지운다기 보다는 비운다는게 맞는 표현 같다.
일단 버퍼부터 말하겠다.
버퍼란 입력 하거나 출력할때 사용되는데 입력 할때마다 처리하는것 보다는 한번에 모와서 일을 하는게 능률적이기 때문에 그 저장공간을 따로 두어 사용하게 된다. 그 공간을 버퍼라 한다.
프로그래밍을 할 때 입력버퍼와 출력버퍼가 있는데 이 입력버퍼 와 출력버퍼를 비울 때에 fflush란 함수가 사용된다 근데 이 함수란 놈이 이 두놈에게 접근할 때 다르게 사용 된다는 사실!!
즉 입력버퍼에 대해 사용 할때에는입력버퍼의 내용을 버려서 버퍼를 깨끗하게 만든다!!
히지만. 출력 버퍼에 대해 사용할때에는출력버퍼의 내용을 출력을 해버리고 깨끗하게 만든다!!
출처 : MSDN Library (링크)fflushFlushes a stream.
int fflush( FILE *stream );
Return Valuefflush 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.
crt_fflush.c
#include <stdio.h>
#include <conio.h>int 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( "%s", string, sizeof(string) );
printf( "%s\n", string );
}// You must flush the input buffer before using gets.
// fflush on input stream is an extension to the C standard
fflush( stdin );
printf( "Enter the same sentence with gets: " );
gets_s( string, sizeof(string) );
printf( "%s\n", string );
}반응형'Archive > C' 카테고리의 다른 글
C# exception (0) 2016.04.04