390 likes | 568 Views
CHAPTER 12. 파일 입출력. 파일의 기본 개념과 특징을 이해한다 . 파일 처리 과정을 공부한다 . 형식을 지정한 파일 입출력을 공부한다 . 문자 단위 입출력을 공부한다 . 이진 파일 입출력을 공부한다 . 파일의 임의 접근에 대해 공부한다. 12.0 개요 p.592. 키보드 입력과 모니터 출력의 단점 해결방법 파일 입력 , 파일 출력. 12.1 파일이란 ? p.593. 파일 (file ) 보조기억장치에 파일명으로 저장된 물리적인 데이터 집합체
E N D
파일의 기본 개념과 특징을 이해한다. • 파일 처리 과정을 공부한다. • 형식을 지정한 파일 입출력을 공부한다. • 문자 단위 입출력을 공부한다. • 이진 파일 입출력을 공부한다. • 파일의 임의 접근에 대해 공부한다.
12.0 개요 p.592 • 키보드 입력과 모니터 출력의 단점 • 해결방법 • 파일 입력, 파일 출력
12.1 파일이란? p.593 • 파일(file) • 보조기억장치에 파일명으로 저장된 물리적인 데이터 집합체 • 저장된 내용의 용도에 따라 프로그램 파일과 데이터 파일로 구분
12.1 파일이란? p.593 • 실험 데이터를 관리하는 프로그램(p.557)에서 • 50번의 실험 데이터를 입력시키고 여러 정보를 검색한 후 실행을 끝냈다고 가정하자. 지금까지 입력한 실험 데이터는 어떻게 될까? • 실행 프로그램이 끝나면 프로그램에서 사용하던 모든 기억장소가 해제되기 때문에 프로그램 실행 동안 저장되었던 실험 데이터는 모두 사라진다. • 프로그램 실행 도중에 전원이 나가면 결과를 확인하기도 전에 모든 데이터가 사라진다. • 실행결과 역시 프로그램 실행 창을 닫으면 모두 사라지므로 결과를 다시 확인하려면 프로그램을 실행해서 실험 데이터를 다시 입력하고 실행 창은 열어 둔 채로 계속 작업해야 한다.
12.2 파일 처리 과정 p.595 • 파일 입출력 네 단계
12.2.1 파일 포인터 선언하기 p.596 파일 포인터가 할당되어 있는 파일에 대해서만 읽기/쓰기가 가능
12.2.2 파일 열기 : fopen함수 p.597 • 파일을 열어야 읽기/쓰기가 가능 파일 포인터 fp가 data.txt 파일에 연결되고, fp를 이용하여 파일에 쓰기가 가능해짐
12.2.2 파일 열기 : fopen함수 p.597 • fopen함수가 실패 • NULL이 반환됨 • 지정한 이름의 파일이 존재하지 않아 읽기 모드로 열 수 없는 경우에는 다음과 같이 에러 처리 코드를 포함하는 것이 바람직 이 메시지 출력 다음 곧바로 프로그램 실행을 강제 종료하기 위해 exit(1);을사용할 수 있다.
12.2.4 파일 닫기 : fclose함수 p.599 • 프로그램 종료 전에 열린 파일들을 닫아야 한다. 몰라도 됨
12.2.3 파일 입출력 함수 p.599 • 파일 입출력을 위해 C 언어에서 제공하는 라이브러리 함수 두 가지만 정확히 알면 됨
12.3.2 형식을 지정한 파일 출력 : fprintf함수 p.591 • fprintf 함수 printf 함수를 사용한 모니터 출력 결과 그대로 파일에 씀
12.3.2 형식을 지정한 파일 출력 : fprintf함수 p.591
p.591 필독
결과 해결 다음과 같이 키보드로 입력받은 나이를 파일에 쓰는 과정을 5번 반복하면 됨
12.3.2 형식을 지정한 파일 입력 : fscanf함수 p.603 • fscanf함수 파일의 데이터를 변환명세로 지정한 형식에 맞게 읽어옴 수 있다.
12.3.2 형식을 지정한 파일 입력 : fscanf함수 p.603
12.3.2 형식을 지정한 파일 입력 : fscanf함수 p.603 필독
[프로그램 12-2]의 결과로 생성된 파일에 n명의 나이를 추가로 쓰기 p.605
12.3.4 파일의 끝 확인하기 다음에 필요할 때 참고할 중요한 내용 • 파일에 저장된 데이터 수를 정확히 모른다면? • feof 함수 등 파일의 끝을 확인하여 파일 읽기를 중단하는 방법을 사용해야 한다. • 12.3.4~12.5 생략 • 12.6 꼭 보기(보관) • 12.7~12,9생략
12.6.1 판매실적 우수자 파일 만들기 파일 처리에서 가장 기본적이고 많이 활용되는 예제 • 판매실적 우수자 파일 만들기 • 사원 번호와 자동차 판매 실적이 저장된 sales_report.txt파일에서 판매 실적이 30보다 큰 사원 번호와 판매 실적을 저장한 good.txt 파일 만들기 • “sales_report.txt” 파일 만들기 • 파일은 다른 프로그램 실행 결과로 만들어 지기도 하며 프로그래머가 직접 필요한 자료를 메모장 같은 편집기에서 직접 입력하여 저장해서 만들기도 한다. • 파일을 직접 만들기 • 자료를 읽을 순서에 맞게 자료형에 맞게 만들어야 하며마지막 자료 뒤에도 엔터키를 입력하는 것을 잊지 않도록 한다.
키보드로 입력받아 모니터로 출력한다면? • printf( “판매 실적 우수자 \n”); • printf( “---------------------\n”); • printf( “사원번호 판매수 \n”); • printf( “---------------------\n”); • for (i=1; i<=10; i++) • { • scanf( “%d %d”, &no, &sales); • if (sales > 30) • printf( “%5d %5d \n”, no, sales); • }
fpr no 1203 sales 25
만일 판매실적을 내림차순으로 정렬하여 모니터로 출력하려면? • 정렬을 하기 위해서는 모든 자료가 배열에 저장되어야 하므로 파일에서 읽은 자료를 다음 그림과 같이 배열에 저장해야 한다. 배열을 정렬 후 모니터로 출력하기(printf) 또는 파일로 출력하기(fprinf)
파일 처리의 팁 • 22~36행 파일로 출력하는 fprintf 함수 부분은 일단 실행결과를 확인할 때까지는 39행과 같이 모두 printf 함수로 작성한 후 결과가 제대로 나오면 36행과 같이 fprintf 함수로 바꾸는 것도 결과를 쉽게 확인하는 방법 • 모니터와 파일 출력을 둘 다 하기 printf 함수로 출력하는 부분을 모두 복사하여 fprintf로 변경함으로써 모니터로도 결과를 출력하고 파일로도 출력 가능
12.6.2 학생 평점 파일을 읽어 평점 순위 파일 만들기 파일 처리에서 가장 기본적이고 많이 활용되는 예제 • 학생의 이름, 평점이 저장된 students.txt 파일에서 학생의 정보를 읽어와 평점에 대한 순위를 구한 후 결과를 rank.txt 파일에 저장하시오.
12.6.2 학생 평점 파일을 읽어 평점 순위 파일 만들기 • students.txt 파일 • 메모장에서 직접 만들어 프로젝트 폴더 안에 저장 • 학생의 수 • 이미 10명으로 알고 있는 상황에서 프로그램을 작성 • students.txt 파일의 내용을 읽어서 구조체 배열 s에 저장 • 모든 학생의 평점 정보가 있어야만 순위를 구할 수 있기 때문에 파일에서 읽은 정보를 모두 배열에 저장해야 함 • 순위 구하기 • 나의 평점 s[i].GPA보다 높은 평점의 개수가 n개 나의 순위 s[i].rank는 n+1등 이 방법은 평점을 정렬해서 순위를 구할 때 필요한 동점 처리를 하지 않아도 되므로 매우 편리하다. 일단 나의 순위를 1로 초기화(s[i].rank = 1;) 한후 다른 모든 학생들과의 평점을 차례대로 비교하면서 나보다 평점이 높은 경우를 만날 때마다 (if (s[i].GPA< s[u].GPA)) 나의 순위를 1 증가(s[i].rank++;)한다. • 나의 순위를 구하기 위해 모든 학생과 비교해야 하므로 for문이 필요하고, 모든 학생에 대해 순위를 구해야 하므로 다시 for문이 필요하므로 이중으로 중첩된 for문이 필요하다.