getchar 함수

*getchar 함수는 글로 표현하지 못한 부분을 동영상 강의에 담았습니다. 필히 동영상 강의를 참고하세요.*

int getchar(void); 표준 입력 스트림의 버퍼에서 맨 앞 문자의 ASCII 코드 값을 반환하는 함수

입력 매개 변수 리스트

없음

반환 값

표준 입력 스트림에 있는 첫 문자

표준 입력 스트림에서 입력받는 함수에는 getchar, gets, scanf 함수 등이 있습니다. 이러한 함수들은 입력 스트림 버퍼가 비어 있으면 최종 사용자로부터 엔터까지 문자열을 입력받습니다. 하지만 처리하지 않은 문자열이 남아 있으면 최종 사용자로부터 입력을 받지 않습니다. getchar 함수는 표준 입력 스트림 버퍼에 첫 문자를 반환하는 함수입니다.

주의할 점은 이전 입력으로 버퍼에 남아 있는 문자가 있으면 최종 사용자로부터 입력받지 않는다는 점입니다. 예를 들어 scanf(“%d”,&num); 처럼 정수 데이터를 입력받은 후 getchar 함수를 호출하면 버퍼에 최소한 ‘\n’ 는 남아 있는 상태입니다. 따라서 앞에서 입력을 받는 구문이 있다면 getchar 함수는 최종 사용자로부터 입력을 받지 않고 버퍼에 남아 있는 첫 번째 문자를 반환합니다. 만약 최종 사용자로부터 입력 받기를 기대한다면 fflush 함수를 호출하여 버퍼를 비운 후에 getchar 함수를 호출합니다.

  • fflush 함수는 개발 환경에 따라 동작이 다를 수 있습니다.

사용 예

//C언어 표준 라이브러리 함수 가이드
//int getchar(void); 표준 입력 스트림의 버퍼에서 맨 앞의 문자의 ASCII 코드 값을 반환하는 함수
//표준 입력 함수를 호출 후에 다시 입력 함수를 호출해야 할 상황 테스트
#include <stdio.h>

int main(void)
{
    int num;
    char ch;

    //정수 입력 및 출력
    printf("정수: ");
    scanf_s("%d", &num);

    printf("입력한 정수: %d", num);

    //문자 입력 및 출력
    printf("문자: ");
    ch = getchar();
    printf("입력한 문자:%c ASCII CODE: %d\n", ch, ch);

    //정수 입력 및 출력
    printf("정수: ");
    scanf_s("%d", &num);
    printf("입력한 정수: %d\n", num);

    printf("문자: ");
    fflush(stdin); //표준 입력 스트림의 버퍼를 비움
                   //문자 입력 및 출력
    
    
    // fflush 함수가 통하지 않으면 getchar();를 한 번 더 호출하거나
    // rewind(stdin); 호출해 보세요.
    //fflush 함수는 개발 환경에 따라 차이가 있음.
    //표준 권고안에는 입력 스트림을 비워준다고 약속, 출력 스트림에는 약속한 바가 없음
    ch = getchar();
    printf("입력한 문자:%c ASCII CODE: %d\n", ch, ch);
    return 0;
}

출력

정수: 23(입력)
입력한 정수: 23문자: 입력한 문자:
 ASCII CODE 10
정수: 23(입력)
입력한 정수: 23
문자: a
입력한 문자: a ASCII CODE: 97

출력 결과를 보면 첫 번째 시도에서는 최종 사용자에게 문자를 입력받지 않고 버퍼에 남아있는 ‘\n’를 반환한 것을 알 수 있습니다. 그리고 두 번째 시도에서는 최종 사용자에게 문자를 입력받고 입력한 문자를 반환하는 것을 알 수 있습니다.

 개인적으로 문자를 입력받을 때 char buf[256]=””; 처럼 문자 형식이 원소인 배열을 선언하고 scanf_s(“%s”,buf,sizeof(buf));를 호출한 후에 ch = buf[0];을 대입하는 형태로 문자를 입력받게 처리하는 것을 선호합니다.