Download presentation
Presentation is loading. Please wait.
1
9주차: Using Files and Others
2
이 번 강의 내용 프로그램에서 파일을 사용하는 방법을 배운다.
예를 들어 성적 데이터 파일을 읽어 들여서 어떤 처리를 하는 경우...
3
파일이란? 파일 컴퓨터의 디스크에 저장되어 있는 어떤 객체 결국은 01011101....의 형태로 되어 있다.
프로그램, 데이터, ... 결국은 의 형태로 되어 있다.
4
디스크와 파일 파일 1 파일2 작은 파일 디스크의 빈 공간 어떤 하드 디스크
5
텍스트 파일 파일의 내용이 문자(char)로 되어 있는 파일 이진 파일(Binary file) 영어, 한글, 기호, ...
C 프로그램의 원시 파일(source file) 이진 파일(Binary file) 실행 프로그램, ...
6
텍스트 파일 만들기 에디터 프로그램을 사용하면 된다. vi, 윈도우 메모장, 워드패드, 한글, ...
단, 한글이나 MS워드를 사용할 때에는 파일을 저장할 때 완성형 텍스트 형식으로 저장할 것
7
C에서 텍스트 파일을 사용 파일의 사용은 다음의 3단계를 거친다. 파일의 열기(Open) 파일의 사용(Using)
파일에서 뭔가를 읽어 들이기, 파일에 뭔가를 쓰기, ... 파일의 닫기(Close)
8
파일을 열기 -FILE *: 파일에 대한 포인터 타입
-ifile: 파일에 대한 포인터 변수, 파일에 대한 주소를 나타낸다고 생각하자. -fopen: 파일을 열고 그 파일에 대한 파일 포인터를 return하는 함수 -”data.txt”: 파일 이름 -”w”: 파일을 쓰기 모드로 연다. #include<stdio.h> int main(void) { FILE *ifile; ifile = fopen(“data.txt”, “w”); ... fclose(ifile) return 0; }
9
파일에서 데이터를 읽어 오기 fscanf 함수 fscanf(file pointer, ...)
stdin 대신 file pointer에서 읽어 들인다.
10
데이터 텍스트 파일 1 35 2 98 234 987 45 3 예를 들어 왼쪽과 같이 생긴 데이터 파일(data.txt)에서 정수들을 쭉 읽어 들여 크기 순으로 화면에 출력하는 작업을 한다고 생각하자...(sorting)
11
우선 파일을 연다. “r”: 파일을 읽기 모드로 연다.
#include<stdio.h> #include<stdlib.h> int main(void) { FILE *ifile; int num[100], num_cnt = 0; int i, j, tmp; ifile = fopen(“data.txt”, “r”); if(!ifile){ printf(“File open error!\n”); exit(1); } “r”: 파일을 읽기 모드로 연다. if(!ifile){...} 만일 ifile이 NULL이면 파일을 열지 못했으므로 프로그램의 수행을 중단한다. exit(1): 프로그램의 비정상적인 종료 stdlib.h: exit 함수를 쓰기 위해 include
12
이제 파일에서 데이터를 읽는다. while(fscanf(ifile, “%d”, &(num[num_cnt])) == 1) num_cnt++; fscanf 함수는 ifile에서 정수 하나를 읽어 num[num_cnt]에 넣고 제대로 읽어 들인 항목의 개수(이 경우는 1)를 return 한다. 마지막에는 읽어 들인 정수가 없으므로 0을 return하고 while 문을 빠져 나오게 된다. num_cnt는 읽어 들인 정수의 총 개수를 가진다.
13
읽은 정수들을 크기 순으로 다시 배열하자. i=0 i=1 i=2 ...
for(i = 0; i < num_cnt; i++) for(j = i + 1; j < num_cnt; j++){ if(num[i] < num[j]){ tmp = num[i]; num[i] = num[j]; num[j] = tmp; } i=0 i=1 i=2 ... first first 2nd first 2nd 3rd
14
이제 배열을 출력하자! fclose(ifile): ifile이 가리키는 파일을 닫는다.
printf(“Sorted numbers are...\n\n”); for(i = 0; i < num_cnt; i++) printf(“%5d”, num[i]); fclose(ifile); return 0; } fclose(ifile): ifile이 가리키는 파일을 닫는다.
15
함수의 인자로 배열을 사용하기 double sum(double a[], int n) { int i; double sum = 0.0; for(i = 0; i < n; i++) sum += a[i]; return sum; } -sum()은 인자로 double 배열 a와 a의 원소의 개수 n을 받아서 배열 a의 모든 원소들의 합을 구해서 return하는 함수이다.
16
교재에서 강의와 연관된 부분 6장 6.6 11장 11.3, 11.4
Similar presentations