1. 소개
C 언어로 프로그래밍할 때 파일 작업과 표준 입력을 다루는 것은 필수입니다. 이 중에서 EOF(End of File)는 파일이나 입력의 끝을 나타내는 특수 값으로 나타납니다. EOF를 제대로 이해하지 못하면 파일의 끝을 올바르게 처리하지 못해 프로그램이 예상치 못한 동작을 할 수 있습니다. 이 글에서는 EOF의 정의, 사용 방법, 그리고 작업할 때 기억해야 할 중요한 포인트 설명합니다.
2. EOF의 정의와 역할
EOF(End of File)는 파일의 끝이나 오류를 나타내기 위해 C에서 사용되는 특수 값이며, 표준 라이브러리 stdio.h에 정의되어 있습니다. 구체적으로 EOF는 -1이라는 값을 가집니다. 파일이나 입력 스트림을 다룰 때 EOF를 사용해 모든 데이터가 읽혔는 확인할 수 있습니다.
예를 들어, getchar()와 fgetc() 함수는 파일의 끝에 도달하면 EOF 반환합니다. 이를 통해 프로그램은 데이터의 끝을 인식하고 적절히 처리할 수 있습니다.
#include <stdio.h>
int main() {
FILE *file = fopen("sample.txt", "r");
int c;
while ((c = fgetc(file)) != EOF) {
putchar(c);
}
fclose(file);
return 0;
}
이 코드는 파일을 한 문자씩 읽어들이면서 EOF에 도달할 때까지 각 문자를 출력합니다.
3. EOF 사용 예시: getchar()와 feof()
EOF는 getchar()와 fgetc()와 같은 입력 함수와 함께 흔히 사용됩니다. 아래는 getchar()와 EOF를 이용한 전형적인 예시입니다.
#include <stdio.h>
int main() {
int c;
// Get characters from standard input until EOF is returned
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
이 프로그램은 표준 입력으로부터 한 문자씩 읽어들이고, EOF가 입력될 때까지 각 문자를 계속 출력합니다. 키보드에서 EOF를 입력하려면 Linux 또는 macOS에서는 Ctrl + D, Windows에서는 Ctrl + Z를 사용합니다.
feof() 함수도 파일의 끝에 도달했는지 확인하는 데 유용합니다. 이 함수는 파일의 끝에 도달하면 true(1)를, 그렇지 않으면 false(0)를 반환합니다.
#include <stdio.h>
int main() {
FILE *file = fopen("sample.txt", "r");
if (file == NULL) {
perror("Cannot open file");
return 1;
}
int c;
while ((c = fgetc(file)) != EOF) {
putchar(c);
}
if (feof(file)) {
printf("nEnd of file reached.n");
}
fclose(file);
return 0;
}
이 코드는 EOF에 도달한 뒤 feof()를 사용해 파일이 완전히 읽혔는지 확인합니다.
4. EOF 처리 시 중요한 주의사항
EOF를 다룰 때 중요한 점 중 하나는 char와 int 타입의 차이입니다. getchar()와 fgetc()와 같은 함수는 EOF를 -1로 반환하므로 반환 타입이 int입니다. 반환 값을 char 변수에 할당하면 부호 오류가 발생해 EOF를 올바르게 처리하지 못할 수 있습니다.
예를 들어, EOF를 char 변수에 할당하면 0xFF로 변환될 수 있습니다. 이 경우 파일의 끝을 제대로 인식하지 못해 예상치 못한 동작이 발생할 수 있습니다.
따라서 EOF를 다룰 때는 int 타입을 사용하는 것이 권장됩니다. 아래는 int 타입을 사용해 EOF를 올바르게 검사하는 예시입니다:
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
이 코드는 반환 값을 int로 받아 EOF를 정확히 감지합니다.

5. 고급 예시: EOF를 이용한 라인 수 세기
EOF를 활용한 고급 사용 예시로, 파일의 라인 수를 세는 프로그램을 살펴보겠습니다. 이 프로그램은 파일을 문자 단위로 읽으며 EOF에 도달할 때까지 진행하고, 개행 문자(\n)가 나타날 때마다 카운트를 증가시킵니다.
#include <stdio.h>
int main() {
FILE *file = fopen("sample.txt", "r");
int c;
int line_count = 0;
if (file == NULL) {
perror("Cannot open file");
return 1;
}
while ((c = fgetc(file)) != EOF) {
if (c == 'n') {
line_count++;
}
}
printf("Number of lines: %dn", line_count);
fclose(file);
return 0;
}
이 프로그램은 파일의 개행 문자 수를 세고 최종 라인 수를 출력합니다. 파일의 끝을 감지하고 처리를 종료하기 위해 EOF를 사용하는 전형적인 예시입니다.
6. 결론
EOF는 파일이나 표준 입력의 끝을 감지하는 데 있어 C에서 중요한 역할을 합니다. EOF를 올바르게 사용하는 방법을 이해하면 보다 신뢰할 수 있는 파일 및 입력 처리 프로그램을 만들 수 있습니다. 또한 char 대신 int 타입을 사용하면 EOF를 정확하게 감지할 수 있다는 점을 기억하세요.
이 문서는 EOF에 대한 기본 개념부터 실용적인 예제 및 고급 사용법까지 포괄적인 설명을 제공했습니다. C에서 파일 작업을 할 때 이 문서를 참고 자료로 자유롭게 활용하세요.


