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

C 언어 feof() 함수 완벽 이해: 파일 끝(EOF) 감지 방법과 예제 프로그램

문제 상황

C 프로그램에서 파일을 읽는 도중, 컴파일러나 프로그램은 어떻게 파일의 끝에 도달했음을 감지할 수 있을까요? 이 글에서는 실제 예제 프로그램을 통해 그 원리를 자세히 살펴보겠습니다.

해결 방법

feof() 함수는 C 언어의 표준 파일 처리 함수 중 하나로, 파일 포인터가 파일의 끝(end of file)에 도달했는지 확인하는 데 사용됩니다. 파일의 끝에 도달하면 0이 아닌 값(non-zero)을 반환하고, 그렇지 않으면 0을 반환합니다.

파일의 끝을 찾기 위해 사용된 핵심 로직은 다음과 같습니다.

fp = fopen ("number.txt", "r"); // 파일을 읽기 모드로 열기
printf ("file content is\n");
for (i=0;i<=100;i++){
   n = getw(fp); // 정수를 하나씩 읽어 n에 저장
   if(feof(fp)) { // 파일 포인터가 끝에 도달하면 반복 종료
      printf ("reached end of file");
      break;
   } else {
      printf ("%d\t", n);
   }
}

여기서 getw() 함수는 파일에서 정수 단위로 데이터를 읽어오고, putw() 함수는 정수를 파일에 쓰는 역할을 합니다. 루프 안에서 매번 데이터를 읽은 후 feof()를 호출하여 파일 끝 여부를 검사하고, 파일 끝에 도달했다면 안내 메시지를 출력한 뒤 break 문으로 반복을 종료합니다.

예제 프로그램

다음은 feof() 함수의 동작을 확인할 수 있는 전체 C 프로그램입니다.

#include<stdio.h>
int main(){
   FILE *fp;
   int i,n;
   // 파일을 쓰기 모드로 열고 0부터 100까지 10씩 증가하는 숫자 저장
   fp = fopen ("number.txt", "w");
   for (i=0;i<=100;i= i+10){
      putw(i,fp);
   }
   fclose (fp);
   // 같은 파일을 읽기 모드로 다시 열기
   fp = fopen ("number.txt", "r");
   printf ("file content is\n");
   for (i=0;i<=100;i++){
      n = getw(fp);
      if(feof(fp)){
         printf ("reached end of file");
         break;
      } else {
         printf ("%d\t", n);
      }
   }
   return 0;
}

이 프로그램은 먼저 number.txt 파일을 쓰기 모드로 열어 0부터 100까지 10씩 증가하는 11개의 정수를 저장합니다. 이후 파일을 닫았다가 다시 읽기 모드로 열어 저장된 내용을 하나씩 읽어 화면에 출력하며, feof() 함수가 파일의 끝을 감지하면 반복문을 종료합니다.

실행 결과

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

file content is
0 10 20 30 40 50 60 70 80 90 100 
reached end of file

정리

feof() 함수는 파일을 처음부터 끝까지 안전하게 읽을 때 필수적인 도구입니다. 특히 파일에 저장된 데이터의 개수를 미리 알 수 없는 경우, feof()를 활용하면 파일 끝에서 더 이상 읽을 데이터가 없다는 것을 정확히 판단하여 무한 루프나 잘못된 값 출력을 방지할 수 있습니다.