1 / 38

CHAPTER 12 . 파일 입출력

CHAPTER 12 . 파일 입출력. 파일의 기본 개념과 특징을 이해한다 . 파일 처리 과정을 이해한다 . 형식을 지정한 파일 입출력 fscanf/fprintf 를 배운다 . 문자 단위 입출력 fgetc/fputc 를 배운다 . 문자열 단위 입출력 fgets/fputs 를 배운다 . 이진 파일 입출력 fread/fwrite 를 배운다 . 임의 접근을 통한 파일 입출력을 위한 fseek, rewind, ftell 을 배운다. 12.0 개요 p.592. input.txt. C 프로그램.

jaron
Download Presentation

CHAPTER 12 . 파일 입출력

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHAPTER 12. 파일 입출력 파일의 기본 개념과 특징을 이해한다. 파일 처리 과정을 이해한다. 형식을 지정한 파일 입출력 fscanf/fprintf를 배운다. 문자 단위 입출력 fgetc/fputc를 배운다. 문자열 단위 입출력 fgets/fputs를 배운다. 이진 파일 입출력 fread/fwrite를 배운다. 임의 접근을 통한 파일입출력을 위한 fseek, rewind, ftell을 배운다.

  2. 12.0 개요 p.592 input.txt C 프로그램 키보드 (표준 입력 장치) • 표준 입출력과 파일 입출력 • 표준 입출력의 문제점과 해결책? 20 파일에서 읽기 입력 age 변수 20 output.txt 출력 파일에 쓰기 • 나이: 20세 모니터 (표준 출력 장치)

  3. 12.0 개요p.594 • 그림 12-4 표준 입출력장치를 통한 입출력과 파일을 통한 입출력 예 모니터 (표준 출력 장치) C 프로그램 키보드 (표준 입력 장치) age 변수 입력 출력 나이: 20세 20 scanf(“%d”, &age) printf(“나이:%d세”, age) C 프로그램 fp1에 연결된 파일 fp2에 연결된 파일 age 변수 파일에서 읽기 파일에 쓰기 20 • 나이: 20세 20 fscanf(fp1, “%d”, &age) fprintf(fp2, “나이:%d세”, age)

  4. 12.1 파일이란? p.593 • 파일(file) • 보조기억장치에 저장된 물리적인 데이터 집합체 • 저장된 내용의 용도에 따라 프로그램 파일과 데이터 파일로 구분 • 그림 12-2 프로그램 파일 한글 프로그램 포토샵 프로그램 실험 관리 프로그램 소개서.hwp 과제.hwp 꽃.jpg 풍경.jpg 실험값.txt 분석결과.txt 데이터 파일

  5. 12.2 파일 처리 과정 p.595 • 파일 입출력 네 단계: 그림 12-6 파일 입력프로그램 키보드 입력프로그램 ①파일 포인터 선언 : scanf("%d", &age); scanf("%d", &height); : FILE * fp; : fp = fopen(“data.txt", “r"); : fscanf(fp, "%d", &age); fscanf(fp, "%d", &height); : fclose(fp); ②파일 열기 ③파일 읽기 (파일에서 읽은 데이터를 변수에 저장) ④파일 닫기 프로그램 변수 프로그램 변수 fp에 연결된 data.txt 파일 키보드 age age fp 20  170 20  170 20 20 height height 170 170

  6. 12.2.1 파일 포인터 선언하기 p.596 • 파일포인터 선언과 파일 열기 • 파일 포인터가 할당되어 있는 파일에 대해서만 읽기/쓰기가 가능 → 파일 열기를 통해 파일 포인터를 파일에 연결해야 함 • 형식) “파일명”의파일을 열기 FILE *파일포인터명; 파일포인터명= fopen(“파일명”, “모드”); → “파일명”의 파일을 “모드”에 맞게 열며 파일포인터가 열린 파일을 가리키게 된다. • “r”: 읽기 전용, “r+” 읽기/쓰기용 • →“파일명”의 파일이 없다면 에러로 NULL 반환 • “w”: 쓰기 전용, “w+” 읽기/쓰기용 • → 파일 내용을 모두 지움, “파일명”의 파일이 없다면 새로 만듬 • “a”: 추가 전용, “a+” 읽기/쓰기 추가용 • → 파일의 끝에 데이터를 추가, “파일명”파일이 없다면 새로 만듬

  7. 12.2.2 파일 열기 : fopen함수 p.597 • 파일 포인터 선언과 파일 열기 예 • 파일의 위치 • 특별히 위치를 지정하지 않으면 프로젝트 폴더에 파일이 생성되며 읽기용 파일이라면 미리 프로젝트 폴더에 저장되어 있어야 함 • 프로젝트 폴더에 있지 않다면 “C:\\file\\age.txt”와같이 절대경로를 명시해야 함 // 선언과 동시에 파일 열기 FILE *fp = fopen(“data.txt”, “w”); FILE *fp; fp = fopen("data.txt", "w"); fp data.txt 파일 fp “data.txt” 파일 쓰기 모드로 열린 빈 파일 “data.txt” 파일의정보를 가진 FILE구조체 쓰기 모드로 열린 빈 파일

  8. 12.2.2 파일 열기 : fopen함수 p.597 • 파일 열기 실패 처리 • fopen함수가 실패시NULL이 반환됨 • 열기 에러 처리 코드의 예 • 지정한 이름의 파일이 존재하지 않는 경우의 에러 처리 코드 FILE *fp; fp = fopen("data.txt", "r"); if (fp == NULL) { printf("지정한 이름의 파일을 열 수 없습니다. \n"); exit(1); }

  9. 12.2.3 파일 입출력 함수 p.599 • 파일 입출력 함수 • 12.3에서 자세히 소개

  10. 12.2.4 파일 닫기 : fclose함수 p.599 • 파일닫기 • 프로그램 종료 전 파일 닫기 → 닫은 파일에 연결된 파일포인터는 새 파일 열기에 사용 가능 • 형식 fclose(파일포인터명); • 예 FILE*fp; fp = fopen("data.txt", "w"); : // 파일에 자료 쓰기 fclose(fp);// 파일 닫기 : fp = fopen(“result.txt", "w");// 파일포인터 재사용 현재 파일포인터에 연결된 파일이 닫기며 파일포인터와의 연결이 해제됨

  11. 12.3.1 형식을 지정한 파일 출력 : fprintf 함수 p.591 • fprintf함수 • 지정한 형식에 맞추어 데이터를 파일로 출력 → printf를 사용한 모니터로의 출력과 똑 같은 내용의 결과를 얻음 • 형식 fprintf(파일포인터명, “변환명세 포함한 형식문자열”, 변수명); • 변수 값이 “형식문자열”에 맞게 변환되여 파일포인터에 연결된 파일에 기록됨 • printf 함수 사용한 모니터 출력 결과 그대로 파일에 기록됨 상수 또는 식도 가능

  12. 12.3.2 형식을 지정한 파일 출력 : fprintf함수 p.591 fp • 나이: 20세 • 예) FILE*fp = fopen(“data.txt”, “r”); age = 20; fprintf(fp, "나이: %d세", age); 파일에 쓰기 fprintf (fp, “나이: %d세“, age); C 프로그램 age 변수 20 stdout printf(“나이: %d세“, age); fprintf (stdout, “나이: %d세“, age); 모니터에 출력하기

  13. 1~10을 “digits.txt” 파일에저장하기 #include <stdio.h> intmain() { inti; for (i=1; i<=10; i++) printf(“%2d\n”, i); return 0; }

  14. 12-2 회원 5명의 나이 정보를 파일에 저장하기 p.602 1 #include <stdio.h> // fopen, fprintf, fclose 함수를 위한 헤더 파일 2 #include <stdlib.h> // exit 함수를 위한 헤더 파일 3 #define SIZE 5 // 회원 수 4 5 int main() 6 { 7 FILE *fp; // 파일 포인터 선언 8 char *f_name = "age.txt"; // 파일명, char f_name[20]="age.txt";도 가능 9 int age, i; 10 11 fp = fopen(f_name, "w"); // fp = fopen("age.txt", "w")도 가능 12 13 if (fp == NULL) // 파일 열기 에러 처리 14 { 15 printf(" %s 파일 열기 에러! \n", f_name); 16 exit(1); 17 } 19 printf("회원 %d명의 나이를 입력하면 파일로 저장합니다.\n", SIZE);

  15. 12-2 회원 5명의 나이 정보를 파일에 저장하기 p.602 21 for (i=0; i<SIZE; i++) 22 { 23 printf("%2d번 회원의 나이는? ", i+1); 24 scanf("%d", &age); 25 26 fprintf(fp, "%d\n", age); 27 } 28 29 fclose(fp); 30 printf("회원 %d명의 나이를 %s 파일에 저장했습니다.\n", SIZE, f_name); 31 32 return 0; 33 } • age.txt 파일의 내용 • 20↲ • 23↲ • 25↲ • 21↲ • 20↲ 실행결과 • 회원 5명의 나이를 입력하면 파일로 저장합니다. • 1번 회원의 나이는? 20 • 2번 회원의 나이는? 23 • 3번 회원의 나이는? 25 • 4번 회원의 나이는? 21 • 5번 회원의 나이는? 20 • 회원 5명의 나이를 age.txt 파일에 저장했습니다

  16. 12.3.2 형식을 지정한 파일 입력 : fscanf 함수 p.603 • fscanf함수 • 파일의 데이터를 변환명세로 지정한 형식에 맞게 읽어서변수에 저장 → scanf의키보드 자료 입력과 똑 같은 내용이 파일에 기록되어 있어야 함 • 형식 fscanf(파일포인터명, “변환명세”, &변수명) • 파일포인터가 가리키는 파일에서 변환명세에 맞게 데이터를 읽어서 변수에 저장 • 읽기 실패 또는 파일의 끝에 도달했다면 EOF를 반환

  17. 12.3.2 형식을 지정한 파일 입력 : fscanf 함수 p.603 • 예) FILE *fp = fopen("read.txt"); fscanf(fp, "%d", &age); fscanf(fp, "%d", &height); 파일에서 읽기 C 프로그램 read.txt 파일 fscanf(fp, “%d”, &age); fp age 변수 20 • 20 • 170 height 변수 170 fscanf(fp, “%d”, &height);

  18. 12-3 “age.txt” 파일의 나이 정보를 화면에 출력하기 p.604 1 #include <stdio.h> // fopen, fscanf, fclose 함수를 위한 헤더 파일 2 #include <stdlib.h> // exit 함수를 위한 헤더 파일 3 #define SIZE5 // 회원 수 4 5 int main() 6 { 7 FILE *fp; // 파일 포인터 선언 8 char *f_name = "age.txt"; // 파일명, char f_name[20]="age.txt";도 가능 9 int age, i; 10 11 fp = fopen(f_name, "r"); // f_name 이름의 파일을 읽기용으로 열기 12 13 if (fp == NULL) // 파일 열기 에러 처리 14 { 15 printf(" %s 파일을 열 수 없습니다. \n", f_name); 16 exit(1); 17 }

  19. 12-3 “age.txt” 파일의 나이 정보를 화면에 출력하기 p.604 19 for (i=0; i<SIZE; i++) // 파일의 나이를 SIZE개 읽어 모니터에 출력하기 20 { 21 // fp에 연결된 파일에서 정수 한 개를 읽어 age에 저장하기 22 fscanf(fp, "%d", &age); 23 24 // age에 저장된 나이를 모니터에 출력하기 25 printf("%2d번 회원의 나이는 %d세 \n", i+1, age); 26 } 27 28 fclose(fp); // fp에 연결된 age.txt 파일을 닫고 연결을 끊기 30 return 0; 31 } • age.txt 파일의 내용 • 20↲ • 23↲ • 25↲ • 21↲ • 20↲ 실행결과 • 1번 회원의 나이는 20세 • 2번 회원의 나이는 23세 • 3번 회원의 나이는 25세 • 4번 회원의 나이는 21세 • 5번 회원의 나이는 20세

  20. fprintf와 fscanf의 주의점 p.601 • 주의 p.601 • 여러 값을 한꺼번에 파일에 쓸 때 공백 문자(빈칸, 탭키, 엔터키) 넣기 age = 20; height = 170; fprint(fp, "%d%d\n", age, height); 공백 문자가 없다. • 20170 이후 이 파일을 읽기용으로 연 후 fscanf(fp, “%d%d“, &age, &height);를 사용한다면? 20170이 age에 저장되고 height에는 데이터가 입력되지 않음 → 20과 170 사이에 공백 문자를 넣어둬야 한다.

  21. fprintf와 fscanf의 주의점 p.603 • 주의 p.603 • scanf와 마찬가지로 변환명세에 주의 • 일반 문자 사용 불가 • 필드폭은 생략 • 변환명세 끝에 빈칸이나 ‘\n’넣지 말기 fscanf(fp, "키:%5d ", &height); 빈칸 또는 \n을 넣으면 데이터를 한 개 더 읽게 됨 일반 문자는 불가능 필드폭을사용 않는 것이 더 안전

  22. 12.3.3 파일의 추가 p.605 • 추가 모드의 필요성 • 쓰기 모드는 기존의 파일 내용을 모두 지우고 새로 쓰기를 함 • (이전 실행 결과 + 새 실행 결과) 추가 모드로 열어야 함 • [프로그램 12-4] • [프로그램 12-2]에서 만든 age.txt 파일에 n명의 나이를 추가하는 프로그램 • 파일 작성 두 가지 방법 • 프로그램을 통한 실행 결과로 만들기 • 프로그램에 사용할 데이터를 미리 일반 편집기를 이용하여 파일로 만들기 → 목적에 따라 두 방법 중 선택 가능 → [프로그램 12-2]를 실행하지 않고 age.txt 파일을 메모장 또는 비주얼 스튜디오에서 직접 만든 후 [프로그램 12-4]를 실행해도 됨

  23. 12-4 age.txt 파일에 n명의 나이 추가하기 p.605 1 #include <stdio.h> // fopen, fprintf, fclose 함수를 위한 헤더 파일 2 #include <stdlib.h> // exit 함수를 위한 헤더 파일 3 4 int main() 5 { 6 FILE *fp; // 파일 포인터 선언 7 char *f_name = "age.txt"; // 파일명, char f_name[20]="age.txt";도 가능 8 int age, i, n; 9 10 fp = fopen(f_name, "a"); // f_name 이름의 파일을 추가용으로 열기 11 12 if (fp == NULL) // 파일 열기 에러 처리 13 { 14 printf(" %s 파일 열기 에러! \n", f_name); exit(1); 15 } 추가 모드

  24. 12-4 age.txt 파일에 n명의 나이 추가하기 p.605 17 printf("회원의 나이를 입력하면 %s 파일에 추가합니다.\n", f_name); 18 printf("추가할 회원의 수는? "); 19 scanf("%d", &n); // 파일에 추가할 회원 나이 개수를 입력 20 21 // n명의 나이를 키보드에서 입력받아 파일에 추가하기 22 for (i=0; i<n; i++) 23 { 24 printf("회원의 나이는? "); 25 scanf("%d", &age); // 키보드에서 회원의 나이를 입력 26 27 fprintf(fp, "%d\n", age); // age에 저장된 나이를 fp에 연결된 파일에 쓰기 28 } 29 fclose(fp); 30 printf("회원 %d명의 나이를 %s 파일에 추가했습니다.\n", n, f_name); 31 32 return 0; 33 }

  25. 프로그램 12-4 age.txt 파일에 n명의 나이 추가하기 p.605 • 분석 • 실행전age.txt 파일의 내용 • 실행 후 age.txt 파일의 내용 • 20↲ • 23↲ • 25↲ • 21↲ • 20↲ 20 23 25 21 20 29 31 27 실행결과 회원의 나이를 입력하면 age.txt 파일에 추가합니다. 추가할 회원의 수는? 3 회원의 나이는? 29 회원의 나이는? 31 회원의 나이는? 27 회원 3명의 나이를 age.txt 파일에 추가했습니다.

  26. 12.6.2 학생 평점 파일을 읽어 평점 순위 파일 만들기 p.625 • 문제 • 입력 파일: 학생의 이름, 평점이 저장된 students.txt 파일 • 출력 파일: 학생의 이름, 평점, 순위가 저장된 rank.txt 파일 rank.txt 파일 students.txt 파일 나태희 2.31 10↲ 유현빈 4.23 3↲ 나원빈4.42 2↲ 문건영 3.72 8↲ 소지법3.74 7↲ 나보내3.85 5↲ 장도건 4.06 4↲ 고수영 3.72 8↲ 이나라4.43 1↲ 김해수 3.77 6↲ 나태희 2.31↲ 유현빈 4.23↲ 나원빈4.42↲ 문건영 3.72↲ 소지법3.74↲ 나보내3.85↲ 장도건 4.06↲ 고수영 3.72↲ 이나라4.43↲ 김해수 3.77↲ [프로그램 12-14]

  27. 12.6.2 학생 평점 파일을 읽어 평점 순위 파일 만들기 p.625 • 분석 • 학생의 정보 • 구조체(이름, 평점 저장) • 학생의 수는 10명임을 알고 있는 경우임 • students.txt 파일 • 메모장에서 직접 만들어 프로젝트 폴더 안에 저장 • 모든 학생의 평점 정보가 있어야만 순위를 구할 수 있음→ 파일에서 읽은 정보를 모두 배열에 저장해야 함→ 파일의 내용을 읽어서 구조체 배열 s에 저장 • 순위 구하기 • 나의 평점 s[i].GPA보다 높은 평점의 개수가 n개 → 나의 순위 s[i].rank는 n+1등

  28. 프로그램 12-14 성적 처리 프로그램 p.625 1 #include <stdio.h> // fopen, fscanf, fprintf, fclose, EOF, printf의 헤더 파일 2 #include <stdlib.h> // exit 함수를 위한 헤더 파일 3 #define SIZE 10 // 파일에 저장된 학생의 수 5 struct student // 구조체 정의 6 { 7 char name[20]; // 이름 8 double GPA; // 평점 9 int rank; // 순위 10 }; 11 12 int main() 13 { 14 struct student s[SIZE]; // 구조체 배열 선언 15 int i, u; 16 FILE *fp; // 파일 포인터 선언 17 18 fp = fopen("students.txt", "r"); // 학생 정보를 읽을 파일 열기 19 if (fp == NULL) // 파일 열기 에러 처리 20 { 21 printf("\n파일 열기 에러! \n"); exit(1); 22 }

  29. 프로그램 12-14 성적 처리 프로그램 p.625 24 // 파일에 있는 학생 정보를 읽어 구조체 배열에 저장하기 25 for (i=0; i<SIZE; i++) 26 { 27 fscanf(fp, "%s %lf", s[i].name, &s[i].GPA); 28 } 29 fclose(fp); // 파일의 모든 자료를 배열에 저장했으므로 읽기용 파일을 닫기 30 31 // 파일에서 읽은 평점을 이용하여 나 s[i]의 순위를 구하기 32 for (i=0; i<SIZE; i++) 33 { 34 s[i].rank = 1; // 일단 나(i)의 순위를 1로 초기화 35 for (u=1; u<SIZE; u++) 36 { 37 // 나(i)의 평점이 다른 학생(u)의 평점보다 낮으면 순위를 1 증가 38 if (s[i].GPA < s[u].GPA) 39 s[i].rank ++; 40 } 41 }

  30. 프로그램 12-14 성적 처리 프로그램 p.625 43 // 파일에 결과 출력하기 44 fp = fopen("rank.txt", "w");// 결과를 출력할 rank.txt 파일을 쓰기용으로 열기 45 if (fp == NULL) // 파일 열기 에러 처리 46 { 47 printf("\n파일 열기 에러! \n"); exit(1); 48 } 50 // SIZE명의 이름, 평점, 순위를 파일에 쓰기 51 for (i=0; i<SIZE; i++) 52 { 53 fprintf(fp,"%-8s %4.2lf %2d\n",s[i].name,s[i].GPA,s[i].rank); 54 // printf("%-8s %4.2lf %2d\n", s[i].name, s[i].GPA, s[i].rank); 55 } 56 fclose(fp); // 파일 닫기 57 printf("파일 출력 완료! \n"); 58 59 return 0; 60 }

  31. 12.3.4 파일의 끝 확인하기 p.607 • 파일에 저장된 레코드(데이터) 수를 정확히 모른다면? • 파일의 끝을 확인하여 파일 읽기를 중단하는 방법을 사용해야 한다. • 대표적 방법 두가지 • feof함수 이용하기 • 파일의 끝을 지나 제대로 읽기를 못했다면 파일에서 읽기를 그만하기 • 예: [프로그램 12-6] • fscanf함수의 반환값 활용하기 • 파일의 끝에 도착하거나 에러가 발생하여 EOF를 반환하지 않았다면 읽은 데이터를 사용하고 그렇지 않다면 읽기를 그만하기 • 예: [프로그램 12-13] • 파일의 레코드 수를 아는 경우 • 예: [프로그램 12-14]

  32. 12.6.1 판매실적 우수자 파일 만들기 p.623 • 문제: 판매실적 우수자 파일 만들기 • 입력: 사원 번호,자동차 판매 실적이 저장된 sales_report.txt파일 • 출력: 판매 실적이 30보다 큰 사원 번호,판매 실적을 저장한 good.txt파일 • 분석 • “sales_report.txt” 파일 만들기 자료를 읽을 순서에 맞게 자료형에 맞게 만들어야 하며마지막 자료 뒤에도 엔터키를 입력하는 것을 잊지 않는다. 판매실적 우수자 ------------------- 사원번호 판매수 ------------------- 1102 35대 1105 32대 1202 40대 1113 52대 ------------------- • 1203 25↲ • 1102 35↲ • 1103 21↲ • 1205 29↲ • 1105 32↲ • 1202 40↲ • 1207 25↲ • 1112 27↲ • 1113 52↲ • 1212 27↲ sales_report.txt 파일 good.txt 파일 [프로그램 12-13]

  33. 12-13 사원 정보 파일에서 판매 실적 우수자 명단 파일 만들기 p.623 1 #include <stdio.h> // fopen, fscanf, fprintf, fclose, EOF, printf의 헤더 파일 2 #include <stdlib.h> // exit 함수를 위한 헤더 파일 3 4 int main() 5 { 6 int no, sales; 7 FILE *fpr, *fpw; // 읽기용, 쓰기용 파일 포인터 선언 8 9 fpr = fopen("sales_report.txt", "r"); // 판매 실적 파일을 읽기용으로 열기 10 if (fpr == NULL)// 파일 열기 에러 처리 11 {printf("파일 열기 에러! \n"); exit(1);} 14 15 fpw = fopen("good.txt", "w"); // 우수자 명단 파일을 쓰기용으로 열기 16 if (fpw == NULL) // 파일 열기 에러 처리 17 {printf("파일 열기 에러! \n"); exit(1);} 20 21 // 출력 제목을 파일에 쓰기 22 fprintf(fpw, "판매실적 우수자 \n\n"); 23 fprintf(fpw, " ------------------- \n"); 24 fprintf(fpw, " 사원번호 판매수 \n"); 25 fprintf(fpw, " ------------------- \n");

  34. 12-13 사원 정보 파일에서 판매 실적 우수자 명단 파일 만들기 p.623 27 // 파일에서 읽기를 성공했다면 판매수가 30보다 클 때만 우수자 명단 파일에 저장하기 28 while (fscanf(fpr, "%d %d", &no, &sales) != EOF) 29 { 30 if (sales > 30) 31 { 32 fprintf(fpw, " %5d %5d대 \n", no, sales); 33 // printf(" %5d %5d대 \n", no, sales); 모니터 결과 확인용 34 } 35 } 36 fprintf(fpw, " ------------------- \n"); 37 38 fclose(fpr); fclose(fpw); // 파일 닫기 39 printf(" 우수자 명단 파일을 저장했습니다. \n"); 40 41 return 0; 42 } 파일에 저장된 레코드 수를 모를 때 파일 읽기가 제대로 되었을 때만 while 본체 실행하기 good.txt 파일 sales_report.txt 판매실적 우수자 ------------------- 사원번호 판매수 ------------------- 1102 35대 1203 25 1102 35 1103 21 1205 29 1105 32 1202 40 : : fpr no 1102 sales 35

  35. 12-13 사원 정보 파일에서 판매 실적 우수자 명단 파일 만들기 p.623 good.txt 파일의 내용 sales_report.txt 파일의 내용 판매실적 우수자 ------------------- 사원번호 판매수 ------------------- 1102 35대 1105 32대 1202 40대 1113 52대 ------------------- 1203 25 1102 35 1103 21 1205 29 1105 32 1202 40 1207 25 1112 27 1113 52 1212 27 [프로그램 12-13]

  36. 프로그램 12-13 판매 실적 우수자 명단 파일 만들기 p.623 • 만일 판매실적을 내림차순으로 정렬하여 모니터로 출력하려면? • 정렬을 하기 위해서는 모든 자료가 배열에 저장되어야 하므로 파일에서 읽은 자료를 다음 그림과 같이 배열에 저장해야 한다. sales_report.txt 파일의 내용 1203 25 1102 35 1103 21 1205 29 1105 32 1202 40 1207 25 1112 27 1113 52 1212 27 배열을 정렬 후 모니터로 출력하기(printf) 또는 파일로 출력하기(fprinf)

  37. 파일 처리의 팁 • 파일 처리의 팁 • 22~36행 • 파일로 출력하는 fprintf부분을 39행 처럼 모두 printf 함수로 작성한 후 • 결과가 제대로 나오면 36행 처럼 fprintf함수로 바꾸는 것도 결과를 쉽게 확하는 방법 예) 32행을printf(" %5d %5d대 \n", no, sales); 로 작성 후 fprintf(fpw, " %5d %5d대 \n", no, sales);로 수정하기 • 모니터와 파일 출력을 둘 다 하기 printf 함수로 출력하는 부분을 모두 복사하여 fprintf로 변경함으로써 모니터로도 결과를 출력하고 파일로도 출력 가능 32fprintf(fpw, " %5d %5d대 \n", no, sales); 33 printf(" %5d %5d대 \n", no, sales);

  38. 파일 처리의 팁 12.4부터는 모두 생략 • 파일 처리의 팁 • 22~36행 • 파일로 출력하는 fprintf부분을 39행 처럼 모두 printf 함수로 작성한 후 • 결과가 제대로 나오면 36행 처럼 fprintf함수로 바꾸는 것도 결과를 쉽게 확하는 방법 예) 32행을printf(" %5d %5d대 \n", no, sales); 로 작성 후 fprintf(fpw, " %5d %5d대 \n", no, sales);로 수정하기 • 모니터와 파일 출력을 둘 다 하기 printf 함수로 출력하는 부분을 모두 복사하여 fprintf로 변경함으로써 모니터로도 결과를 출력하고 파일로도 출력 가능 32fprintf(fpw, " %5d %5d대 \n", no, sales); 33 printf(" %5d %5d대 \n", no, sales);

More Related