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

C 프로그래밍에서 파일 끝(EOF) 완벽 이해하기

파일 끝(End of File, EOF)은 입력의 끝을 나타내는 신호입니다. 텍스트 입력 중 Ctrl+Z(Windows 기준)를 누르면 입력이 종료되며, 더 이상 읽을 데이터가 없음을 의미합니다.

EOF는 stdio.h 헤더 파일에 정의된 매크로로, 일반적으로 정수 값 -1로 정의되어 있습니다. 참고로 Windows에서는 Ctrl+Z, Unix/Linux 계열에서는 Ctrl+D를 눌러 EOF 신호를 보낼 수 있습니다.

알고리즘

EOF 처리 과정은 아래 알고리즘과 같습니다.

1단계: 파일을 쓰기 모드(w)로 연다.
2단계: 파일 끝(EOF)에 도달할 때까지 각 문자를 파일 포인터에 기록한다.
3단계: 파일을 닫는다.
4단계: 파일을 다시 읽기 모드(r)로 연다.
5단계: 파일 포인터가 EOF와 같아질 때까지 파일에서 문자를 하나씩 읽는다.
6단계: 읽은 문자를 콘솔에 출력한다.
7단계: 파일을 닫는다.

예제 코드

다음은 C 언어로 작성한 파일 끝(EOF) 처리 프로그램입니다.

#include <stdio.h>

int main() {
    char ch;
    FILE *fp;

    // 파일을 쓰기 모드로 열기
    fp = fopen("std1.txt", "w");
    printf("텍스트를 입력한 후 Ctrl+Z를 누르세요:\n");

    // 문자를 하나씩 읽어 EOF가 나올 때까지 파일에 기록
    // 사용자가 Ctrl+Z를 누르면 while 루프가 종료됨
    while ((ch = getchar()) != EOF) {
        putc(ch, fp);
    }
    fclose(fp);

    // 파일을 읽기 모드로 다시 열기
    fp = fopen("std1.txt", "r");
    printf("파일에 저장된 텍스트:\n");

    // EOF를 만날 때까지 파일에서 문자를 하나씩 읽어 출력
    while ((ch = getc(fp)) != EOF) {
        putchar(ch);
    }
    fclose(fp);

    return 0;
}

코드 설명

이 프로그램은 두 단계로 동작합니다. 먼저 fopen() 함수로 std1.txt 파일을 쓰기 모드로 연 뒤, getchar()로 키보드 입력을 한 글자씩 받아 putc()로 파일에 기록합니다. 사용자가 Ctrl+Z를 누르면 getchar()가 EOF를 반환하여 첫 번째 반복문이 종료됩니다.

이후 같은 파일을 읽기 모드로 다시 열고, getc()로 파일 내용을 한 글자씩 읽어 putchar()로 화면에 출력합니다. 파일의 끝에 도달하면 getc()가 EOF를 반환하므로 두 번째 반복문도 종료됩니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

텍스트를 입력한 후 Ctrl+Z를 누르세요:
This is the EOF demonstration example
if your text typing is over press cntrlZ
^Z
파일에 저장된 텍스트:
This is the EOF demonstration example
if your text typing is over press cntrlZ

정리

EOF는 파일이나 입력 스트림의 끝을 판별하는 핵심 개념으로, 파일 입출력 프로그래밍에서 반복문 종료 조건으로 널리 사용됩니다. 다만 char형 변수 대신 int형 변수로 문자를 받으면 EOF(-1)와 일반 문자 값을 더 안전하게 구분할 수 있으므로, 실무에서는 int ch; 형태로 선언하는 것이 권장됩니다.