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

C언어 getc(), getchar(), getch(), getche() 함수의 차이점 총정리

C언어에는 키보드나 입력 스트림으로부터 문자 하나를 읽어오는 다양한 함수들이 있습니다. 이 함수들은 모두 읽어온 문자를 정수형 값으로 반환하며, 파일의 끝에 도달하거나 오류가 발생하면 EOF(-1)를 반환합니다. 다만 각 함수마다 입력 대상과 동작 방식이 다르므로, 상황에 맞는 함수를 선택하는 것이 중요합니다. 지금부터 네 가지 함수를 하나씩 자세히 살펴보겠습니다.

1. getc() 함수

getc()는 지정된 입력 스트림(FILE 스트림)으로부터 문자 하나를 읽어 정수 값으로 반환합니다. 읽기에 실패하거나 파일의 끝에 도달하면 EOF를 반환합니다. 표준 입력뿐 아니라 임의의 파일 스트림도 인자로 전달할 수 있다는 점이 특징입니다.

문법

int getc(FILE *stream);

예제 코드

#include <stdio.h>

int main() {
    char val;
    printf("Enter the character: \n");
    val = getc(stdin);
    printf("Character entered: ");
    putc(val, stdout);
    return 0;
}

실행 결과

Enter the character: a
Character entered: a

2. getchar() 함수

getchar()는 표준 입력(stdin)으로부터 문자 하나를 읽어오는 함수입니다. getc()가 임의의 입력 스트림을 인자로 받는 것과 달리, getchar()는 항상 표준 입력만을 대상으로 하며 실질적으로 getc(stdin)과 동일하게 동작합니다.

문법

int getchar(void);

예제 코드

#include <stdio.h>

int main() {
    char val;
    val = getchar();
    printf("Enter the character : \n");
    printf("Entered character : %c", val);
    return 0;
}

실행 결과

Enter the character : n
Entered character : n

3. getch() 함수

getch()는 비표준(non-standard) 함수로, conio.h 헤더 파일에 선언되어 있으며 주로 Turbo C 환경에서 사용됩니다. C 표준 라이브러리에는 포함되어 있지 않으므로 이식성이 떨어진다는 점에 유의해야 합니다. 가장 큰 특징은 사용자가 엔터 키를 누를 때까지 기다리지 않고 입력된 문자를 즉시 반환한다는 것이며, 입력한 문자가 화면에 표시(에코)되지 않습니다.

문법

int getch();

예제 코드

#include <stdio.h>
#include <conio.h>

int main() {
    char val;
    val = getch();
    printf("Enter the character : ");
    printf("Entered character : %c", val);
    return 0;
}

실행 결과

Enter the character : m
Entered character : m

4. getche() 함수

getche() 역시 getch()와 마찬가지로 conio.h 헤더 파일에 선언된 비표준 함수입니다. 키보드로부터 문자 하나를 읽어 엔터 키 입력 없이 즉시 반환한다는 점은 getch()와 같지만, 입력된 문자가 화면에 그대로 표시(echo)된다는 점이 다릅니다. 함수 이름 끝의 'e'가 바로 echo를 의미합니다.

문법

int getche(void);

예제 코드

#include <stdio.h>
#include <conio.h>

int main() {
    char val;
    val = getche();
    printf("Enter the character : ");
    printf("Entered character : %c", val);
    return 0;
}

실행 결과

Enter the character : s Entered character : s

네 가지 함수 비교 요약

각 함수의 주요 차이점을 표로 정리하면 다음과 같습니다.

함수헤더 파일표준 여부입력 대상엔터 키 대기화면 에코
getc()stdio.h표준임의의 FILE 스트림대기함해당 없음
getchar()stdio.h표준표준 입력(stdin)대기함해당 없음
getch()conio.h비표준키보드대기하지 않음표시되지 않음
getche()conio.h비표준키보드대기하지 않음화면에 표시됨

정리하자면, 일반적인 C 프로그램에서는 표준 함수인 getc()getchar()를 사용하는 것이 좋으며, getch()와 getche()는 Turbo C 등 특정 컴파일러 환경에서만 동작하므로 이식성이 중요한 프로젝트에서는 사용을 피하는 것이 바람직합니다.