프로그램 개요
이 프로그램은 하나의 파일에 저장된 정수 데이터를 읽어 들여 홀수와 짝수를 자동으로 분류한 뒤, 각각 별도의 파일에 저장하는 C 언어 예제입니다. 즉, 홀수는 ODD 파일에, 짝수는 EVEN 파일에 기록됩니다.
전체적인 동작 흐름은 다음과 같습니다.
- 먼저 DATA 파일을 쓰기 모드(w)로 열고 숫자를 입력받아 저장한 후 닫습니다.
- 다음으로 DATA 파일을 읽기 모드(r)로, ODD 파일과 EVEN 파일을 쓰기 모드로 엽니다.
- while 반복문을 이용해 DATA 파일의 내용을 하나씩 읽으면서 홀수인지 짝수인지 판별하고, 결과를 각각의 파일에 기록합니다.
- 마지막으로 모든 파일을 닫고, ODD 파일과 EVEN 파일의 내용을 화면에 출력해 확인합니다.
C 프로그램 소스 코드
다음은 파일 개념을 활용해 정수 데이터 파일을 처리하는 C 프로그램입니다.
#include <stdio.h>
int main(){
FILE *f1,*f2,*f3;
int number,i;
printf("DATA file content is\n");
f1=fopen("DATA","w");// DATA 파일 생성(쓰기 모드)
for(i=1;i<=10;i++){
scanf("%d",&number);
if(number==-1)
break;
putw(number,f1); // 정수를 파일에 저장
}
fclose(f1);
f1=fopen("DATA","r"); // DATA 파일 읽기 모드
f2=fopen("ODD","w"); // ODD 파일 쓰기 모드
f3=fopen("EVEN","w"); // EVEN 파일 쓰기 모드
while((number=getw(f1))!=EOF){ // DATA 파일에서 한 단어씩 읽기
if(number %2 ==0)
putw(number,f3); // 짝수는 EVEN 파일에 기록
else
putw(number,f2); // 홀수는 ODD 파일에 기록
}
fclose(f1);
fclose(f2);
fclose(f3);
f2=fopen("ODD","r");
f3=fopen("EVEN","r");
printf("\n contents of ODD file:\n");
while((number=getw(f2))!=EOF)
printf("%3d",number);
printf("\n contents of EVEN file:\n");
while((number=getw(f3))!=EOF)
printf("%3d",number);
fclose(f2);
fclose(f3);
return 0;
}핵심 포인트
- fopen(): 파일을 지정한 모드(w: 쓰기, r: 읽기)로 열며, 성공 시 FILE 포인터를 반환합니다.
- putw(): 정수 값을 파일에 한 단어(word) 단위로 기록하는 함수입니다.
- getw(): 파일에서 정수를 한 단어씩 읽어오며, 더 이상 읽을 데이터가 없으면 EOF를 반환합니다.
- fclose(): 작업이 끝난 파일을 닫아 버퍼의 내용을 안전하게 디스크에 저장합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 출력을 얻을 수 있습니다.
DATA file content is 1 2 3 4 5 6 7 8 9 10 contents of ODD file: 1 3 5 7 9 contents of EVEN file: 2 4 6 8 10