본문 바로가기
프로그래밍언어/C 언어

[C 언어] 입력 버퍼 지우기

by khsnote22 2022. 12. 9.

scanf와 getchar 함수는 같은 버퍼를 사용하며 입력 데이터를 공유합니다. 따라서 앞서 실행한 입력 함수가 버퍼에 남겨둔 데이터를 그 이후에 수행되는 함수가 잘못 가져갈 가능성이 있습니다. 따라서 버퍼에 남아 있는 불필요한 데이터는 미리 제거하는 것이 좋습니다. 입력 버퍼의 내용을 지우는 건 간단합니다. 버퍼에 남아 있는 문자들을 모두 입력해서 사용하지 않고 버리면 됩니다. 

#include <stdio.h>

int main(void)
{
	int num, grade; // 학번과 학점을 저장할 변수
    printf("학번 입력 : ");
    scanf("%d", &num); // 학번 입력
    getchar(); // 버퍼에 남아 있는 개행 문자 제거
    printf("학점 입력 : ");
    grade = getchar() // 학점 입력
    printf("학번 : %d, 학점 : %c", num, grade);
    return 0;
}

버퍼가 비어 있으면 다시 키보드로부터 입력을 시도하여 학점을 제대로 입력할 수 있습니다. 만약 9행에서 버퍼의 개행 문자를 제거하지 않으면 버퍼에 있는 개행 문자를 11행에서 호출되는 getchar 함수가 가져갑니다. 따라서 학점을 추가로 입력받지 못하고 프로그램이 계속 진행되며 grade에 저장된 개행 문자는 다음행에서 출력되어 줄이 바뀌게 됩니다.