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")로 엽니다. 만약 파일 포인터 fp가 NULL이면 오류 메시지를 출력하고 프로그램을 종료합니다. 파일 열기에 성공했다면, 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)이 있는 인자를 사용할 때는 주의해야 합니다.