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

C 언어 getchar(), fgetc(), getc() 함수의 반환 타입 완벽 가이드

C 프로그래밍에서 문자를 입력받을 때 자주 사용되는 getchar(), fgetc(), getc() 함수는 모두 읽은 문자를 int 형태로 반환한다는 공통점이 있습니다. 이 세 함수의 동작 방식과 차이점을 예제 코드와 함께 자세히 살펴보겠습니다.

1. getchar() 함수

getchar() 함수는 표준 입력 스트림인 stdin에서 한 문자를 읽어옵니다. 읽어들인 문자를 int 타입으로 반환하며, 오류가 발생하거나 파일의 끝에 도달하면 EOF(End Of File)를 반환합니다.

예제 코드

#include <stdio.h>

int main (){
    int i;

    printf("Enter a character: ");
    i = getchar();

    printf("\nThe character entered is: ");
    putchar(i);

    return(0);
}

실행 결과

Enter a character: G
The character entered is: G

코드 설명

위 프로그램의 동작 흐름은 다음과 같습니다. 먼저 getchar() 함수로 입력받은 문자의 값이 정수형 변수 i에 저장됩니다. 이후 putchar() 함수를 사용해 해당 문자 값을 화면에 출력합니다.

int i;

printf("Enter a character: ");
i = getchar();

printf("\nThe character entered is: ");
putchar(i);

2. fgetc() 함수

fgetc() 함수는 FILE 객체를 가리키는 포인터, 즉 파일 스트림으로부터 한 문자를 읽어옵니다. getchar()와 마찬가지로 읽은 문자를 int 타입으로 반환하고, 오류 발생 시 EOF를 반환합니다. 주로 파일의 내용을 한 글자씩 처리할 때 유용하게 사용됩니다.

예제 코드

#include <stdio.h>

int main (){
    FILE *fp;
    fp = fopen("file.txt", "w");
    fprintf(fp, "Apple");
    fclose(fp);

    int i;

    fp = fopen("file.txt","r");

    if(fp == NULL){
        perror("Error in opening file");
        return(-1);
    }

    while((i=fgetc(fp))!=EOF){
        printf("%c",i);
    }

    fclose(fp);
    return(0);
}

실행 결과

Apple

코드 설명

프로그램은 크게 두 단계로 나누어 볼 수 있습니다.

첫 번째 단계: 쓰기 모드("w")로 파일을 생성한 뒤, "Apple"이라는 데이터를 저장하고 파일을 닫습니다.

FILE *fp;
fp = fopen("file.txt", "w");
fprintf(fp, "Apple");
fclose(fp);

두 번째 단계: 파일을 다시 읽기 모드("r")로 엽니다. 만약 파일 포인터 fpNULL이면 오류 메시지를 출력하고 프로그램을 종료합니다. 파일 열기에 성공했다면, fgetc() 함수를 반복 호출하여 파일 끝(EOF)에 도달할 때까지 내용을 한 글자씩 출력합니다.

fp = fopen("file.txt","r");

if(fp == NULL){
    perror("Error in opening file");
    return(-1);
}

while((i=fgetc(fp))!=EOF){
    printf("%c",i);
}

fclose(fp);

3. getc() 함수

getc() 함수는 지정된 스트림으로부터 한 문자를 읽어옵니다. 반환 방식은 앞선 두 함수와 동일하게 읽은 문자를 int 타입으로 돌려주며, 오류 발생 시 EOF를 반환합니다. getchar()가 stdin에 고정되어 있는 것과 달리, getc()는 원하는 스트림을 직접 인자로 전달할 수 있다는 점이 특징입니다.

예제 코드

#include <stdio.h>

int main (){
    int i;

    printf("Enter a character: ");
    i = getc(stdin);

    printf("\nThe character entered is: ");
    putchar(i);

    return(0);
}

실행 결과

Enter a character: K
The character entered is: K

코드 설명

위 프로그램에서는 getc() 함수에 표준 입력 스트림 stdin을 명시적으로 전달하여 문자를 입력받습니다. 입력받은 값은 정수형 변수 i에 저장되고, 이후 putchar() 함수를 통해 화면에 출력됩니다.

int i;

printf("Enter a character: ");
i = getc(stdin);

printf("\nThe character entered is: ");
putchar(i);

세 함수의 핵심 정리

  • 공통점: 세 함수 모두 읽은 문자를 int 타입으로 반환하며, 오류나 파일 끝 도달 시 EOF를 반환합니다.
  • getchar(): 매개변수 없이 항상 표준 입력(stdin)에서 문자를 읽습니다.
  • fgetc(): 파일 스트림을 인자로 받아 해당 파일에서 문자를 읽으며, 일반적으로 매크로가 아닌 함수로 구현됩니다.
  • getc(): 임의의 스트림을 인자로 받아 문자를 읽으며, 보통 매크로로 구현되어 fgetc()보다 빠를 수 있지만 부작용(side effect)이 있는 인자를 사용할 때는 주의해야 합니다.