C 언어에서 파일을 읽기 모드(read mode)로 열면 해당 파일이 존재하는 경우 파일 안에 몇 줄이 있는지 개수를 세는 프로그램을 작성할 수 있습니다. 반대로 파일이 존재하지 않는다면 '파일이 없습니다'라는 오류 메시지를 화면에 표시하도록 처리할 수 있습니다.
여기서 말하는 파일(file)이란 레코드(record)들의 모음을 의미하며, 데이터를 하드 디스크에 영구적으로 저장해 두는 공간이라고 할 수 있습니다.
파일과 관련하여 수행할 수 있는 대표적인 연산은 다음과 같습니다.
- 파일 이름 지정
- 파일 열기
- 파일 읽기
- 파일에 쓰기
- 파일 닫기
파일 열기 문법(Syntax)
파일 포인터를 선언하고 fopen() 함수로 파일을 여는 기본 문법은 다음과 같습니다.
1) FILE *파일포인터;
예: FILE *fptr;
2) 파일포인터 = fopen("파일 이름", "모드");
예: fptr = fopen("sample.txt", "r"); // 읽기 모드
FILE *fp;
fp = fopen("sample.txt", "w"); // 쓰기 모드프로그램 1 — 존재하는 파일의 줄 수 세기
아래 예제는 미리 생성해 둔 "Employee Details.txt" 파일을 읽기 모드로 열어, 문자를 하나씩 읽으면서 개행 문자(\n)를 발견할 때마다 카운트를 증가시키는 방식으로 전체 줄 수를 계산합니다.
#include <stdio.h>
#define FILENAME "Employee Details.txt"
int main(){
FILE *fp;
char ch;
int linesCount = 0;
// 파일을 읽기 모드로 열기
fp = fopen(FILENAME, "r");
if(fp == NULL){
printf("File \"%s\" does not exist!!!\n", FILENAME);
return -1;
}
// 문자 단위로 읽으면서 새 줄(new line) 확인
while((ch = getc(fp)) != EOF){
if(ch == '\n')
linesCount++;
}
// 파일 닫기
fclose(fp);
// 줄 수 출력
printf("Total number of lines are: %d\n", linesCount);
return 0;
}실행 결과
Total number of lines are: 3 Note: employee details.txt 파일 내용은 다음과 같음 Pinky 20 5000.000000 → 위 파일의 총 줄 수는 3줄
파일의 마지막 줄 뒤에 개행 문자가 없더라도 getc() 함수가 EOF까지 읽기 때문에, 실제 데이터 줄 수를 정확히 반영하려면 마지막 줄에도 개행 문자가 있는지 확인하는 추가 로직을 넣으면 더 견고한 프로그램이 됩니다.
프로그램 2 — 사용자 입력으로 파일을 만든 뒤 줄 수 세기
두 번째 예제는 폴더에 파일이 아직 없는 상황을 가정합니다. 먼저 쓰기 모드(w)로 파일을 열어 사용자가 입력한 텍스트를 저장하고, 이후 다시 읽기 모드(r)로 열어 앞선 방식과 동일하게 총 줄 수를 계산합니다.
#include <stdio.h>
#define FILENAME "sample.txt"
int main(){
FILE *fp;
char ch;
int linesCount = 0;
// 파일을 쓰기 모드로 열기
fp = fopen(FILENAME, "w");
printf("enter text press ctrl+z of the end");
// 키보드 입력을 파일에 기록 (Windows: Ctrl+Z, Linux/macOS: Ctrl+D 로 종료)
while((ch = getchar()) != EOF){
fputc(ch, fp);
}
fclose(fp);
// 파일을 읽기 모드로 다시 열기
fp = fopen(FILENAME, "r");
if(fp == NULL){
printf("File \"%s\" does not exist!!!\n", FILENAME);
return -1;
}
// 문자 단위로 읽으면서 새 줄(new line) 확인
while((ch = getc(fp)) != EOF){
if(ch == '\n')
linesCount++;
}
// 파일 닫기
fclose(fp);
// 줄 수 출력
printf("Total number of lines are: %d\n", linesCount);
return 0;
}실행 결과
enter text press ctrl+z of the end Hi welcome to Tutorials Point C Pogramming Question & answers ^Z Total number of lines are: 2
핵심 정리
이 두 프로그램의 핵심 흐름은 다음과 같이 요약할 수 있습니다.
- fopen() 함수로 파일을 원하는 모드(r 또는 w)로 열고, 반환값이 NULL인지 검사해 파일 존재 여부를 확인한다.
- getc() 함수로 파일 끝(EOF)까지 한 글자씩 읽으면서 개행 문자('\n')를 만날 때마다 카운터를 증가시킨다.
- fclose() 함수로 반드시 파일을 닫고 결과를 출력한다.
이 패턴은 로그 파일 분석, 텍스트 데이터 통계 등 다양한 실무 상황에서 확장하여 활용할 수 있는 기본기입니다.