언어 자료구조 알고리즘/C11 표준 라이브러리 함수

getchar 함수 [C언어 표준 라이브러리 함수 가이드]

언제나휴일 2016. 1. 3. 14:53
반응형

getchar


헤더파일

[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - STDIO.H

 

int getchar(void); 표준 입력 스트림의 버퍼에서 맨 앞 문자의 ASCII 코드 값을 반환하는 함수
입력 매개 변수 리스트
없음
반환 값
표준 입력 스트림에서 얻어온 문자의 아스키 코드 값, 오류 시 -1

표준 입력 스트림에서 입력받는 함수에는 getchar, gets, scanf 함수 등이 있습니다. 이러한 함수들은 입력 스트림 버퍼가 비어 있으면 최종 사용자로부터 엔터까지 문자열을 입력받습니다. 하지만 처리하지 않은 문자열이 남아 있으면 최종 사용자로부터 입력을 받지 않습니다. getchar 함수는 표준 입력 스트림 버퍼에 첫 문자를 반환하는 함수입니다.
 
 주의할 점은 이전 입력으로 버퍼에 남아 있는 문자가 있으면 최종 사용자로부터 입력받지 않는다는 점입니다. 예를 들어 scanf("%d",&num); 처럼 정수 데이터를 입력받은 후 getchar 함수를 호출하면 버퍼에 최소한 '\n' 는 남아 있는 상태입니다. 따라서 앞에서 입력을 받는 구문이 있다면 getchar 함수는 최종 사용자로부터 입력을 받지 않고 버퍼에 남아 있는 첫 번째 문자를 반환합니다. 만약 최종 사용자로부터 입력 받기를 기대한다면 fflush 함수를 호출하여 버퍼를 비운 후에 getchar 함수를 호출합니다.
 
사용 예
//C언어 표준 라이브러리 함수 사용법 가이드
//int getchar(void); 표준 입력 스트림의 버퍼에서 맨 앞의 문자의 ASCII 코드 값을 반환하는 함수
//입력 함수를 호출한 후 바로 getchar 함수를 호출할 때와 fflush 호출 후 getchar 함수 호출 비교
#include <stdio.h>
 
void 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); //표준 입력 스트림의 버퍼를 비움
    //문자 입력 및 출력
    getchar();
    ch = getchar();
    printf("입력한 문자:%c ASCII CODE: %d\n", ch, ch);
}
 
출력
정수: 23(입력)
입력한 정수: 23문자: 입력한 문자:
 ASCII CODE 10
정수: 23(입력)
입력한 정수: 23
문자: a
입력한 문자: a ASCII CODE: 97
 
출력 결과를 보면 첫 번째 시도에서는 최종 사용자에게 문자를 입력받지 않고 버퍼에 남아있는 '\n'를 반환한 것을 알 수 있습니다. 그리고 두 번째 시도에서는 최종 사용자에게 문자를 입력받고 입력한 문자를 반환하는 것을 알 수 있습니다.

 

*fflush 함수는 사용하는 환경에 따라 다르게 동작합니다.*

 


사용한 함수

[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - printf

[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - scanf_s

[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - fflush

반응형