Archive/C

C] fflush()

 fflush( stdin );
 
scanf 를 통하여 abc def  라는 입력을 할 경우,
abc 끝에는 문자열의 끝을 의미하는 null character인 ' \0' 이 삽입된다.

따라서 def 대신 '\0'이 입력되어 버그가 발생

 

"fflush는  버퍼내용을 지울때 사용된다!"라고 생각 하고 있었다.

fflush 란 버퍼의 내용을 지운다기 보다는 비운다는게 맞는 표현 같다.

 

일단 버퍼부터 말하겠다.

버퍼란 입력 하거나 출력할때 사용되는데 입력 할때마다 처리하는것 보다는 한번에 모와서 일을 하는게 능률적이기 때문에 그 저장공간을 따로 두어 사용하게 된다. 그 공간을 버퍼라 한다.

 

프로그래밍을 할 때  입력버퍼와 출력버퍼가 있는데 이 입력버퍼 와 출력버퍼를 비울 때에 fflush란 함수가 사용된다 근데 이 함수란 놈이 이 두놈에게 접근할 때 다르게 사용 된다는 사실!!

 

즉 입력버퍼에 대해 사용 할때에는입력버퍼의 내용을 버려서 버퍼를 깨끗하게 만든다!!
히지만. 출력 버퍼에 대해 사용할때에는출력버퍼의 내용을 출력을 해버리고 깨끗하게 만든다!!



출처 : MSDN Library (링크)

fflush

Flushes a stream.

int fflush(     FILE *stream  );
stream

Pointer to FILE structure.

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.

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
C] fflush()  (0) 2009.09.20