Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++에서 입력 버퍼를 지우는 방법: fflush(stdin) 활용법

C 언어의 fflush() 함수는 원래 스트림의 출력 버퍼를 비우는(플러시하는) 용도로 사용됩니다. 그러나 scanf() 호출 직후에 이 함수를 사용하면 입력 버퍼에 남아 있던 개행 문자나 불필요한 데이터까지 함께 제거할 수 있어, 연속적인 입력 처리 시 유용하게 활용됩니다.

함수가 성공적으로 실행되면 0을 반환하고, 실패하면 EOF를 반환하며 feof 오류 지시자가 설정됩니다.

fflush() 함수의 문법

C 언어에서 입력 버퍼를 비우기 위해 사용하는 fflush(stdin)의 기본 문법은 다음과 같습니다.

int fflush(FILE *stream);

예제 코드

다음은 scanf()로 문자열을 입력받은 후 fflush(stdin)을 호출하여 입력 버퍼를 정리하는 예제입니다.

#include <stdio.h>
#include<stdlib.h>

int main() {
    char s[20];

    printf("Enter the string : \n", s);
    scanf("%s\n", s);
    printf("The entered string : %s", s);
        
    fflush(stdin);
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter the string : helloworld
The entered string : helloworld

주의 사항

C 표준 규격상 fflush()출력 스트림에 대해서만 동작이 정의되어 있으며, stdin과 같은 입력 스트림에 사용하는 것은 공식적으로 정의되지 않은 동작(undefined behavior)입니다. 다만 Visual Studio(MSVC) 등 일부 컴파일러에서는 확장 기능으로 입력 버퍼 플러시를 지원합니다.

따라서 이식성(portability)이 중요한 코드라면 while(getchar() != '\n');처럼 반복문으로 버퍼를 직접 비우는 방식을 사용하는 것이 더 안전하고 권장됩니다.