ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 (링크)

    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
Designed by Tistory.