60
1 최최 C 최최최최최 최최 최최최최최최 최최최최최최최 11 최 : 최최 최최최 최최최최 - 최최최최 개개개 개개개

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

  • Upload
    kathie

  • View
    78

  • Download
    2

Embed Size (px)

DESCRIPTION

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 11 장 : 파일 입출력 도서출판 - 인터비젼. 11 장 파일 입출력. 학습목표 1. 스트림과 파일 시스템을 이해한다 . 2. 파일 관련 표준 함수를 이해한다 . 3. 순차 파일과 이진 파일에 대해 이해한다 . 4. 표준 입출력 함수를 이해한다. 목차. 11 장 파일 입출력 예습시간 스트림과 파일 그리고 표준 입출력 파일 입출력 함수 실습시간 텍스트 파일 활용 이진 파일 활용 연습시간 파일 입출력 분석. - PowerPoint PPT Presentation

Citation preview

Page 1: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

1

최신 C 프로그래밍 언어문제해결에서 프로그래밍까지

11 장 : 파일 입출력도서출판 - 인터비젼

개정판개정판개정판개정판

Page 2: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

2최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

11 장 파일 입출력 학습목표

1. 스트림과 파일 시스템을 이해한다 . 2. 파일 관련 표준 함수를 이해한다 . 3. 순차 파일과 이진 파일에 대해 이해한다 . 4. 표준 입출력 함수를 이해한다 .

Page 3: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

3최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

목차 11 장 파일 입출력

예습시간– 스트림과 파일 그리고 표준 입출력– 파일 입출력 함수

실습시간– 텍스트 파일 활용– 이진 파일 활용

연습시간– 파일 입출력 분석

Page 4: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

4최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

예습시간 – 1 교시

스트림과 파일 그리고 표준 입출력

Page 5: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

5최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

학습 개요 외부장치와의 논리적인 흐름을 나타내는 스트림을

이해한다 . 스트림과 파일의 관계를 이해한다 . 표준 입 / 출력 함수들에 대해 다룬다 .

Page 6: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

6최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

스트림 (Stream) 과 파일 (File) 스트림 (Stream)

– 컴퓨터와 연결된 여러 주변장치와의 논리적인 흐름– 주변장치와 연결하는 접속 채널의 개념– 컴퓨터와 주변장치의 정보전달은 스트림을 통해 이루어짐– 모든 정보는 스트림을 통해 전달

파일– C 언어에서 파일은 모든 주변 장치를 포함한다 .

» 디스크에 저장된 파일» 디스플레이 화면» 키보드» 프린터» 직 / 병렬 포트» 테이프 등등…

Page 7: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

7최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력 스트림과 파일

스트림과 파일의 관계– 스트림은 파일을 연결하기 위한 논리적인 접근 통로– 오픈된 스트림을 통해 정보를 전달하거나 받아들임– 스트림 사용을 위해서는 항상 오픈 (Open) 되어야하고 사용 후 닫아 (Clo

se) 주어야 한다 . C 언어에서 제공되는 표준 입 / 출력 장치

– 키보드 : 표준 입력 장치– 디스플레이 화면 : 표준 출력 장치

표준 스트림– 표준 입 / 출력 장치의 연결을 위해 사용되는 스트림– C 프로그램 시작시 자동적으로 오픈되어 사용 가능하다 .– 종류

» stdin : 표준 입력 스트림 ( 키보트와 연결된 스트림 )» stdout : 표준 출력 스트림 ( 디스플레이 화면과 연결된 스트림 )» stderr : 표준 에러 스트림 ( 디스플리이 화면과 연결된 스트림 )

Page 8: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

8최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

표준 입출력 함수 표준 입 / 출력 스트림을 이용하는 함수 표준 입 / 출력 함수 정의 헤더 파일

– stdio.h 표준 입출력 함수의 종류

– 형식이 있는 입출력 함수 – printf(), scanf()– 단일 문자 입출력 함수 – getchar(), putchar()– 문자열 입출력 함수 – gets(), puts()– 버퍼형 입출력 함수 – sscanf(), sprintf()

Page 9: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

9최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력 단일 문자 입출력 함수

단일 문자 입력 함수 – getchar()– 함수의 원형

» int getchar()– 키보드로 부터 하나의 문자를 입력 받는다 .– 리턴 결과

» 정상적 수행 : 해당 문자에 대한 ASCII 코드 값» 비정상적 수행 : EOF 값 반환

단일 문자 출력 함수 – putchar()– 함수의 원형

» int putchar(int ch)– 화면에 ch 에 해당되는 문자를 출력– 리턴 결과

» 정상적 수행 : 입력된 값이 반환» 비정상적 수행 : EOF 값 반환

Page 10: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

10최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

단일 문자 입 / 출력 함수 사용 예 01 #include <stdio.h> 02 void main(){ 03 char ch; 04 printf(" 한문자 입력 :"); 05 ch = getchar(); // 한 문자 입력 06 printf(" 입력받은 결과 출력 : "); 07 putchar(ch); // 입력받은 문자 출력 08 putchar('\n'); // 특수 문자 출력 09 } 출력 결과 : _______________입력된 문자 출력

Page 11: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

11최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

문자열 입출력 함수 문자열 입력함수 – gets()

– 함수의 원형» char *gets(char *str);

– 키보드로 부터 입력된 문자열 값을 저장– *str : 입력된 문자열 저장 주소– 입력된 문자열은 키보드로부터 <Enter> 키를 누른 위치까지 포함– 공백문자도 문자열에 포함됨 – <Enter> 값은 자동적으로 '\0'(NULL) 값으로 변경되어 저장됨– 반환 결과

» 정상적일 경우 : 저장된 문자열의 주소» 비정상적일 경우 : EOF 값

Page 12: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

12최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

문자열 입출력 함수 문자열 출력함수 – puts()

– 함수의 원형» int puts(char *str);

– 입력된 문자열 (*str) 을 화면에 출력– 출력시 '\0' 값은 '\n'(Enter) 값으로 변형되어 출력– 반환 결과

» 정상적일 경우 : 음이 아닌 값» 에러 발생 시 : EOF 값 반환

Page 13: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

13최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력 문자열 입출력 함수 사용 예

01 #include <stdio.h> 02 void main(){ 03 char buffer[80], *bp; 04 printf(" 문자열 입력 : "); 05 bp = gets(buffer); // 문자열 입력 06 if(bp != EOF){ // 정상적인 입력 시 07 puts(" 입력된 문자열 "); 08 puts(bp); // 포인터를 통한 출력 09 puts(buffer); // 배열을 통한 출력 10 } 11 }

입력 값 : 안녕하세요 여러분 출력 결과 :_____________________ :_____________________

안녕하세요 여러분안녕하세요 여러분

Page 14: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

14최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

버퍼형 입출력 함수 형식을 가진 형태로 표준입출력 스트림이 아닌 문자열

변수공간 (Buffer) 에 값을 저장하거나 읽어올 때 사용 버퍼형 입력 함수 – sscanf()

– 함수의 원형» int sscanf(char *buffer, char *format [,argument ] ... );

– buffer : 입력 데이터가 존재하는 문자열 주소– format : 형식지정문자를 포함한 문자열– argument : 값을 저장할 변수 리스트– 문자열로 저장된 데이터를 형식에 맞도록 추출할 목적으로 사용

Page 15: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

15최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

버퍼형 입력 함수 사용 예 01 #include <stdio.h> 02 void main(){ 03 char token[] = "128 14.8 language"; 04 int i; 05 float f; 06 char name[80]; 07 // 문자열로부터 각각의 데이터 추출 08 sscanf( token, "%d %f %s", &i,&f,name ); 09 // 추출 내용 출력 10 printf( "Integer = %d, Float = %f, String = %s\n", i,f,name ); 11 }

출력 결과 : _________________________________________ 128 14.8 language

Page 16: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

16최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

버퍼형 출력함수 – sprintf() 형식화된 문자열을 화면이 아닌 문자열 변수에 저장 여러 데이터 유형을 문자열로 만들 때 유용 함수의 원형

– int sprintf(char *buffer, char *format [,argument] ... ); buffer : 출력할 문자열의 주소 format : 형식지정문자를 포함한 문자열 argument : 값을 저장하고 있는 변수 리스트 buffer 에 출력된 문자열의 수 반환

Page 17: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

17최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

스트림과 파일 그리고 표준 입출력

버퍼형 출력함수 사용 예 01 #include <stdio.h> 02 void main() 03 { 04 char buffer[200]; 05 int i = 28,j; 06 double d = 1.3456; 07 char c='x'; 08 char str[] = "c programming"; 09 j = sprintf(buffer,"i= %d, d = %f, c= %c \n",i,d,c); 10 j = sprintf(buffer + j, "str = %s", str); 11 puts(buffer); 12 } 출력결과 : __________________________________ ______________________________________

i= 28, d = 1.3456, c= xc programming

Page 18: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

18최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

예습시간 – 2 교시

파일 입출력 함수

Page 19: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

19최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 학습 개요

일반 파일에 대한 처리 과정을 이해한다 . 파일 시스템과 파일 조작함수에 대해 다룬다 . 파일의 종류와 이 파일의 입출력 함수들에 대해 알아본다 . 파일의 임의 접근 방식에 대해 이해한다 .

Page 20: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

20최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 파일 시스템의 개요

파일에 데이터를 쓰거나 읽기 위해 스트림 형성이 필요 파일에 스트림 형성 방법

– 파일 포인터 이용 파일 포인터

– 파일을 가리키는 FILE 타입의 구조체 FILE 포인터를 이용한 파일 입출력 단계

– 1. 파일 포인터 선언 » FILE *fp; // fp 는 파일 포인터 변수

– 2. 파일 포인터를 이용해 파일 열기 » fp = fopen(…); // 파일 오픈 후 그 파일에 대한 포인터 반환

– 3. 파일에 대한 입 / 출력 처리 » 파일 포인터 fp 을 이용한 파일 입 / 출력 처리

– 4. 파일 닫기 » fclose(fp); // 사용 후 파일 포인터를 이용해 해당 파일 닫기

Page 21: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

21최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 파일 조작 함수

파일 열기와 닫기 – 파일 스트림의 연결과 닫기– fopen 함수– fclose 함수

파일 검사– 입출력 과정에서 발생된 에러 확인– feof 함수– ferror 함수

기타 파일 조작 함수– 파일의 제거 및 이름 변경– rename 함수– remove 함수

Page 22: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

22최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 파일 열기 (fopen 함수 )

– 함수의 원형» FILE* fopen(char *filename, char*mode);

filename : 파일의 이름 mode : 파일에 대한 접근 방법 반환 값 : 파일에 대한 포인터 (FILE *)

mode 종류 설    명

"r" 읽기용 텍스트 파일 오픈 , 파일이 존재해야 함 

"w" 쓰기용 텍스트 파일 오픈 , 파일 미 존재 시 새롭게 생성 , 존재 시 내용 무시  

"a" 추가용 텍스트 파일 오픈 , 기존의 내용 보존되고 새롭게 내용 추가

"rb" 읽기용 이진 파일 오픈 , 파일 존재해야 함

"wb" 쓰기용 이진 파일 오픈 , 파일 미 존재 시 새롭게 생성 , 존재 시 무시 

"ab" 추가용 이진 파일 오픈 , 기존 내용 보존 , 새로운 내용 추가

"r+" 읽기 / 쓰기용 텍스트 파일 오픈 , 파일 존재해야 함

"w+" 읽기 / 쓰기용 텍스트 파일 오픈 , 파일 미 존재 시 생성 , 존재 시 무시 

"a+" 읽기 / 추가용 텍스트 파일 오픈 , 파일 존재 시 내용 추가 , 미 존재 시 생성

"rb+" 읽기 / 쓰기용 이진 파일 오픈 , 파일 존재해야 함

"wb+" 읽기 / 쓰기용 이잔 파일 오픈 , 파일 미 존재 시 생성 , 존재 시 무시

"ab+" 읽기 / 추가용 이진 파일 오픈 , 파일 존재 시 내용 추가 , 미 존재시 생성

»mode 의 종류

Page 23: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

23최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 파일 열기 (fopen 함수 )

– fopen 의 정상적 수행 시 해당 파일의 포인터를 리턴 하지만 실패 시 NULL 값을 리턴

– 파일 오픈 과정에서 에러 확인 필요– 사용 예 >

» 1 FILE *fp; » 2 ... » 3 fp = fopen("test.dat","r"); » 4 if(fp == NULL){ » 5 printf(" 파일오픈 실패 !“); » 6 exit(1); » 7 }

파일 닫기 (fclose 함수 )– 함수 원형

» int fclose(FILE *fp);– 오픈된 파일은 사용 후 반드시 닫아야 한다 .– 열려진 파일 포인터를 인지를 화여 fclose 함수 호출

Page 24: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

24최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 파일 입출력 과정

– 파일 입출력 과정은 버퍼 공간을 통해 이루어진다 .– 시스템에 의해 자동적으로 버퍼의 공간에 저장된 데이터 파일로

출력– 버퍼의 사용 목적

» 두 시스템간의 완충 작용 ( CPU 와 주변장치 사이 )» 두 시스템 사이의 처리 속도 문제 해결

– 필요에 따라 버퍼의 내용을 강제적으로 출력 하고자 할 경우에는 fflush 함수를 사용한다 .

fflush 함수– 버퍼의 내용을 강제적으로 파일에 작성하고 버퍼 비우는 역할

수행– 함수의 원형

» int fflush(FILE *fp); fp : 오픈된 파일의 포인터

Page 25: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

25최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 파일 검사 함수 ( feof / ferror )

feof 함수– 파일의 끝에 정상적으로 도달 했는지의 여부 검사– 함수의 원형

» int feof(FILE *fp);» 처리 결과

fp 가 파일의 끝에 도달할 경우 : 0 이 아닌 값 그렇지 않을 경우 : 0

ferror 함수– 파일에 에러가 존재하는지의 여부 검사– 함수의 원형

» int ferror(FILE *fp);» 처리 결과

파일 처리 과정 중 에러 발생 시 : 0 이 아닌 값 그렇지 않을 경우 : 0

Page 26: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

26최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 기타 파일 조작 함수 ( rename / remove )

rename 함수– 파일의 이름을 변경– 함수의 원형

» int rename(char *oldname, char*newname); oldname : 변경할 파일 이름 newname : 새롭게 변경될 파일 이름

remove 함수– 해당 파일을 삭제– 함수의 원형

» int remove(char*path); path : 제거할 파일의 경로 ( 이름 )

두 함수다 정상적 수행 후 결과 값을 0 으로 그렇지 않을 경우 0 이 아닌 값을 반환한다 .

Page 27: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

27최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 텍스트 파일 입 / 출력 함수

텍스트로 오픈된 파일의 조작함수 단일 문자 입출력 함수

– 함수의 종류» int getc( FILE *stream); // 스트림으로부터 한 문자 입력 매크로 » int fgetc( FILE *stream); // 스트림으로부터 한 문자 입력 함수 » int putc( int c,FILE* stream); // 스트림에 한 문자 출력 매크로 » int fputc( int c,FILE* stream); // 스트림에 한 문자 출력 함수

– 처리 결과» 정상적 수행

해당 문자를 반환하고 파일 포인터를 1중가 시킴» 파일의 끝이거나 오류 발생

EOF(-1) 값 반환

Page 28: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

28최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 단일 문자 입출력 함수 사용 예

– 01 #include <stdio.h> – 02 #include <stdlib.h> // exit() 함수 – 03 int main(){ – 04 FILE *rfp, *wfp; – 05 char c; – 06 rfp = fopen("test.txt","r"); – 07 if(rfp == NULL){ – 08 printf("test.txt 파일이 존재하지 않습니다 .\n"); – 09 exit(1); – 10 } – 11 wfp = fopen("copy.txt","w"); – 12 if(wfp == NULL){ – 13 printf("copy.txt 파일생성이 오류 발생 .\n"); – 14 exit(1); – 15 } – 16 while((c=fgetc(rfp)) != EOF){ – 17 fputc(c,wfp); – 18 } – 19 fclose(rfp); – 20 fclose(wfp); – 21 printf("text.txt 을 copy.txt 파일로 복사 완료 되었습니다 .\n"); – 22 return 0; – 24 }

Page 29: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

29최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 문자열 입출력 함수 (fgets / fputs)

텍스트 파일에 대한 문자열 입출력 제공 fgets() 함수

– 문자열 입력 함수– 입력 스트림으로부터 n-1 개의 문자를 읽어 들여 문자열 변수에

저장– 문자열 입력 시 '\n' 문자를 만나면 그때까지의 문자열을 저장– 문자열 마지막에 '\0' 문자 자동 포함– 함수의 원형– char *fgets( char* string, int n, FILE *stream);

» string : 문자열 저장 버퍼 » n : 입력 최대 문자 수 » stream : 입력용 파일 포인터 » 반환 값 : 파일의 끝이나 에러 발생시 EOF » 정상적일 경우 저장된 문자열의 주소

Page 30: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

30최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fgets() 함수 사용 예

– 01 #include <stdio.h> – 02 void main(){ – 03 FILE *stream; – 04 char line[30]; – 05 if( (stream = fopen( "test.txt", "r" )) != NULL ){ – 06 while( fgets(line, 30, stream ) != NULL){ – 07 printf( "line = : [%s]\n", line); – 08 } – 09 fclose( stream ); – 10 } – 11 }

입 / 출력 결과

test.txt 파일

실행 화면

Page 31: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

31최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fputs 함수

– 문자열을 파일에 작성하기 위해 사용– 문자열을 파일로 출력할 때 문자열의 맨 마지막에 존재하는 '\0'

(NULL) 문자는 출력 되지 않는다 .– 함수의 원형

» int fputs( char *string, FILE *stream); string : 출력할 문자열 stream : 출력 대상 파일 포인터 반환 값 : 에러 발생시 EOF 발생 정상적인 출력 시 음수가 아닌 값을 반환

Page 32: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

32최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fputs() 함수 사용 예

– 01 #include <stdio.h> – 02 void main(){ – 03 FILE *stream; – 04 static char string[] = "Binary Files\nText Files"; – 05 if( (stream = fopen( "file.txt", "w" )) != NULL ){ – 06 fputs(string,stream); – 07 } – 08 fclose( stream ); – 09 }

– 출력 결과 : ______________________ – ______________________

Binary FilesText Files

Page 33: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

33최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 형식을 갖춘 파일 입출력 ( fprintf / fscanf )

fprintf() 함수– 형식을 포함하여 파일에 텍스트 문자열 작성– printf() 함수와 비슷하지만 출력 위치가 파일이다 .– 함수 원형

» int fprintf( FILE* stream, char*format [, argument ]...); stream : 출력 파일 포인터 format : 형식 지정 문자을 포함한 출력 문자열 argument : 인수 리스트 반환 값 : 정상적인 수행 시 출력한 바이트 수를 리턴 오류 발생 시 음수 값 리턴

Page 34: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

34최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fscanf() 함수

– 형식을 포함하여 텍스트 파일로부터 값 읽기– scanf 와 동일하게 사용되며 표준 입력 장치가 아닌 파일로부터

입력– 표준 입력 장치의 파일의 끝 ( CTRL + Z )– 함수의 원형

» int fscanf( FILE *stream, char *format [, argument ]... ); stream : 입력 파일 포인터 format : 입력 형식 제어 문자열 argument : 인수 리스트 반환 값 : 정상적인 수행 시 인수의 개수를 반환 파일의 끝이나 에러 발생시 EOF 반환

이 두 함수에서 입력 파일 포인터를 stdin( 표준 입력 )으로 출력 파일 포인터를 stdout( 표준 출력 ) 으로 지정 시 scanf() 와 printf() 함수와 동일한 효과 발생

Page 35: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

35최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 형식을 갖춘 파일 입출력 함수 사용 예

– 01 #include <stdio.h> – 02 void main(){ – 03 FILE *in,*out; – 04 int ivalue = 128, i; – 05 float fvalue = 2.35f, f; – 06 char str[] = "textfile", s[80]; – 07 // 파일 쓰기 – 08 out = fopen( "file.txt", "w" ); – 09 fprintf(out, "%d %f %s", ivalue, fvalue, str ); – 10 fclose(out); – 11 // 파일 읽기 – 12 in = fopen("file.txt","r"); – 13 if(in != NULL){ – 14 fscanf(in,"%d %f %s",&i,&f,s); – 15 fprintf(stdout,"int = %d , double = %f \n", i,f); – 16 printf("str = %s \n",s); – 17 fclose(in); – 18 } – 19 }

Page 36: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

36최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 이진 파일 입 / 출력 함수 (fread / fwrite)

문자 변환 없이 이진 파일의 입 / 출력 함수 fread 함수

– 이진데이터의 입력 함수– 함수의 원형

» size_t fread(void *buffer,size_t size,size_t count,FILE *stream ); buffer : 저장할 데이터 위치 size : 읽을 데이터의 크기 count : 읽을 데이터의 개수 stream : 읽을 파일 포인터 반환 값 : 정상적일 경우 읽은 데이터의 개수 파일의 끝이나 오류 발생시 실제 읽은 데이터의 개수로 count 값보다 작은 값 반환

Page 37: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

37최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fwrite 함수

– 이진 파일의 출력 함수– 함수의 원형

» size_t fwrite(void *buffer,size_t size,size_t count,FILE *stream ); buffer : 저장 대상 데이터 위치 size : 작성할 데이터의 크기 count : 작성할 데이터의 개수 stream : 작성할 파일 포인터 반환 값 : 실제 저장된 데이터의 개수 오류 발생시 count 값보다 작은 값 반환

Page 38: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

38최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fread 와 fwrite 함수 사용 예01 #include <stdio.h>

02 void main(){ 03 FILE *in, *out; 04 static int ivalue[] = {100,200,300}; 05 int iresult[3], i, cnt; 06 //쓰기용 이진 파일 열기 07 out = fopen("file.bin","wb"); 08 if(out==NULL){ 09 printf("file.bin 파일 열기 실패 !"); 10 return; 11 } 12 // 값 저장 13 cnt = fwrite(ivalue,sizeof(int),3,out); 14 if(cnt != 3) { 15 printf("ivalue 쓰기 실패 !\n"); 16 fclose(out); 17 return; 18 } 19 fclose(out); 20 // 읽기용 이진 파일 열기 21 in = fopen("file.bin","rb"); 22 if(in==NULL){ 23 printf("file.bin 파일 열기 실패 !\n"); 24 return; 25 }

26 // 정수 값 읽기 27 i=0; 28 do{ 29 cnt=fread(&iresult[i],sizeof(int),1,in); 30 i++; 31 }while(cnt == 1); 32 if(ferror(in)){ 33 printf(" 파일 읽기 에러 !\n"); 34 fclose(in); 35 return; 36 } 37 if(feof(in)){ 38 printf(" 파일읽기 완료 !\n"); 39 printf(" 결과 데이터 : "); 40 for(i=0; i<3;i++){ 41 printf("%5d",iresult[i]); 42 } 43 printf("\n"); 44 } 45 fclose(in); 46 }

Page 39: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

39최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 임의 파일 접근 함수 (fseek, ftell, rewind)

일반적인 파일 입출력– 순차적 접근 방식– 순차적으로 값을 읽고 자동적으로 파일 포인터 증가 방식

임의 접근 방식– 읽고자 하는 위치로 파일 포인터 이동

임의 파일 접근 함수의 종류– fseek– ftell– rewind

Page 40: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

40최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fseek 함수

– 파일 포인터를 원하는 위치로 이동 시키는 함수– 함수의 원형

» int fseek( FILE *stream, long offset, int origin ); stream : 파일 포인터 offset : 지정된 시작 위치에서부터 떨어진 바이트의 수 origin : 시작 위치 반환 값 : 정상적인 수행 후 파일 포인터 해당 위치로 이동 , 결과 값 0 반환 실패 시 0 이 아닌 다른 값 반환

– 시작 위치 (origin) 의 종류

시작 위치 종류  (origin)의  미

매크로 이름 값SEEK_SET 0 파일의 최초 시작 위치SEEK_CUR 1 파일 포인터가 위치한 현재 위치SEEK_END 2 파일의 끝 위치

Page 41: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

41최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fseek 함수 사용 예

– fseek(stream, 100L, SEEK_SET); » 파일의 시작 위치에서 100바이트 떨어진 위치로 파일 포인터 이동

– fseek(stream, 30L, SEEK_CUR); » 파일포인터의 현재 위치에서 30바이트 증가된 위치로 파일 포인터 이동

– fseek(stream, -20L, SEEK_END); » 파일의 끝 위치에서 20바이트 감소된 위치로 파일 포인터 이동

ftell 함수– 현재의 파일 포인터 위치 반환 함수– 함수의 원형

» long ftell( FILE *stream); stream : 파일 포인터 반환 값 : 정상적으로 수행 시 파일 포인터의 현재 위치 반환 실패 시 -1 값을 반환

rewind 함수– 파일 포인터의 위치를 처음으로 이동– 함수의 원형

» void rewind( FILE *stream); stream : 파일 포인터 반환 값 : 없음 ( 파일 포인터의 위치를 처음으로 이동 )

Page 42: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

42최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력 함수 fseek, ftell 그리고 rewind 함수 사용 예

01 #include <stdio.h> 02 void main(){ 03 FILE *in; 04 int result1,result2, seek; 05 // 읽기용 이진 파일 열기 06 in = fopen("file.bin","rb"); 07 if(in==NULL){ 08 printf("file.bin 파일 열기 실패 !\n"); 09 return; 10 } 11 // 정수 값 읽기

12 seek = fseek(in,-(sizeof(int)),SEEK_END); 13 if(seek == 0){ // 정상적인 이동 14 printf("locattion after seek : %d \n", ftell(in)); 15 fread(&result1,sizeof(int),1,in); 16 printf("feek = %d\n",result1); 17 rewind(in); 18 printf("location after rewind : %d \n", ftell(in)); 19 fread(&result2,sizeof(int),1,in); 20 printf("rewind = %d\n",result2); 21 } 22 fclose(in); 23 }

Page 43: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

43최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

실습시간 – 1 교시

텍스트 파일 활용

Page 44: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

44최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 학습개요

예제를 통한 텍스트 파일 관련 함수를 이용한다 . 간단한 텍스트 문서 편집기를 만든다 . 문자 조작 함수를 사용한다 .

Page 45: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

45최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 텍스트 편집기

문제 정의– 텍스트 편집기는 다양한 분야에서 활용되고 있다 . 이러한 텍스트 편집기로 동작

가능한 프로그램을 만들어 보자 . 만들 텍스트 편집기의 기능은 새 파일 작성 , 불러오기 , 저장하기 기능과 라인단위의 수정 기능을 포함하고 있다 . 새 파일 작성은 키보드로부터 문자열을 입력 받아 문자열 공간에 저장하고 이 내용을 새로운 파일로 작성한다 . 불러오기는 특정 파일을 읽어 화면에 출력시킨다 . 또한 수정 기능은 라인 단위의 수정 기능만을 제공한다 . 이러한 내용을 만족하는 텍스트 편집기를 작성 하시오 .

입 / 출력 조건– 입력 조건

» 1. 작업 선택 (1: 새파일 , 2: 열기 , 3: 수정 , 4: 종료 ) » 2. 새 파일 선택 시 문자열 » 입력 문자열 입력 종료는 [CTRL + Z] 입력 - [EOF 의미 ] » 입력 종료 시 저장 여부 확인 » 3. 불러오기 선택 시 파일의 이름 입력 » 4. 수정하기 선택 시 수정할 파일 이름 입력 » 수정을 위해 라인과 문자열 입력 » 수정 후 저장 여부 확인 » 6. 텍스트로 저장할 문자열의 크기는 1024 바이트로 한정한다 .

Page 46: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

46최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 입 / 출력 조건

– 출력 조건» 1. 불러오기 선택 시 해당 파일의 내용을 화면에 출력 » 2. 수정하기 선택 시 먼저 선택된 파일을 라인단위로 출력 » 수정 여부에 대한 메시지 출력

관련 함수 및 식– 1. 텍스트 기반 파일 관련 함수 (<stdio.h>)

» fopen(), fclose() // 파일 열기와 닫기 » gets(), puts() // 표준 입출력을 통한 문자열 읽기와 쓰기 » getchar() // 표준 입력으로부터 한 문자 입력 » fputs(), fgets() // 파일에 문자열 읽기와 쓰기

– 2. 문자열 조작함수 (<string.h>) » strcat() // 문자열 결합

– 3. 기타 함수 » tolower() // 한 문자를 소문자로 <ctype.h> » fflush() // 버퍼비우기 <stdio.h> » system("cls") // 화면 클리어 <windows.h>

Page 47: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

47최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 알고리즘 (또는 플로우 차트 )

– 1) 작업 선택 (1:새파일 2: 열기 3: 수정 4: 종료 ) » 1.1 새파일 작업 선택 시

1.1.1 <CTRL>+Z 값을 만날 때 까지 문자열을 입력 받는다 . 1.1.2 입력 문자열 저장 1.1.2.1 저장할 이름 입력 1.1.2.1 내용 저장

» 1.2 열기 선택 시 1.2.1 열기를 원하는 파일 이름 선택 1.2.1 화면에 라인단위로 출력

» 1.3 수정 선택 시 1.3.1 수정 파일에 대한 내용을 화면에 출력 1.3.2 수정을 위한 라인 번호와 문자열 입력 1.3.2 파일에 수정 결과 반영

– 2) 종료를 선택하기 전까지 1) 을 계속해서 반복한다 .

Page 48: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

48최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 프로그램 구조체차트

Page 49: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

49최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 프로그램 작성

1 단계– 349페이지의 프로그램을 위의 분석된 내용을 토대로 작성한 후

editor.c 파일로 저장하자 .

①. getchar() ②. getchar() ③. gets(line) != NULL ④. strcat(pb,snum) ⑤. fp = fopen(fname,"w"); ⑥. strcat(bp,str); ⑦. strcat(bp,"\n"); ⑧. strcat(bp,line)

Page 50: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

50최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 2 단계

– 다음 입력 조건에 대한 결과를 작성하여 보자입력 조건 출력 결과

아래 순서대로 입력 하시오 .선택 : 1 ( 새파일 )[ 입력 문자열 ]안녕하세요여기는 대한민국 입니다 .Good Bye!ꍭ +Z파일 저장여부 : y파일 이름 :mail.txt----------------------선택 : 2 ( 열기 )불러올 파일 이름 : mail.txt----------------------선택 : 3 ( 수정 )수정할 라인 번호 : 2수정 내용 : 여기는 서울 입니다 .--------------------------선택 : 2 ( 열기 )불러올 파일 이름 : mail.txt--------------------------선택 : 4 ( 종료 )

                                                     

선택 1 결과 : 선택 2 결과 :

선택 3 결과 : 선택 4 결과 :

Page 51: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

51최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

텍스트 파일 활용 입력 조건에 대한 결과 작성 ( 계속 )

입력 조건 출력 결과

아래 순서대로 입력 하시오 .선택 : 1 ( 새파일 )[ 입력 문자열 ]Binary FilesA file is a collection of data파일은 데이터의 집합이다 .텍스트 파일 저장End Textꍭ +Z파일 저장여부 : y파일 이름 :file.txt----------------------선택 : 2 ( 열기 )불러올 파일 이름 : file.txt----------------------선택 : 3 ( 수정 )수정할 라인 번호 : 1수정 내용 : 문서 내용선택 : 3 ( 수정 )수정할 라인 번호 : 4문서 수정됨--------------------------선택 : 2 ( 열기 )불러올 파일 이름 : file.txt--------------------------선택 : 4 ( 종료 )

 

Page 52: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

52최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

실습시간 – 2 교시

이진 파일 활용

Page 53: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

53최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

이진 파일 활용 학습개요

구조체를 이용한 이진 파일 활용방법을 익힌다 . 이진파일 관련 함수의 사용법을 이해한다 . 도서정보 검색 프로그램을 작성한다 .

Page 54: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

54최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

이진 파일 활용 도서정보 검색 프로그램

문제 정의– 한 서점에서 보유한 책에 대한 정보를 제공하는 프로그램을 만들려고

한다 . 프로그램 시작 시 서점에 보유한 책의 리스트를 보여주고 해당 목록번호를 입력 시 그 책에 대한 자세한 정보를 제공할 수 있도록 작성하여 보자 . 프로그램 시작 시 책에 대한 리스트 정보와 세부정보가 이진 파일로 저장되어지고 이 저장된 내용을 이용해 검색할 수 있도록 프로그램을 작성하여라 .

입 / 출력 조건– 입력 조건

» 세부정보를 원하는 책의 목록 번호 – 출력 조건

» 목록 번호에 대한 책의 세부 내용 출력

Page 55: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

55최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

이진 파일 활용 관련 함수 및 식

– 1. 목록리스트와 이 리스트에 대한 세부 정보가 프로그램 시작 시 만들어 진다 .

– 2. 목록리스트와 세부정보는 구조체 형태를 가지며 이진 형태로 저장된다 .

– 3. 목록 리스트의 구조체

– 4. 세부 정보에 대한 구조체

– 5. 세부 정보들은 목록 순서로 파일에 저장된다 .

목록 구조체 타입  (LIST)

목록번호 간략한 책이름 

(int number) (char sname[20])

도서 세부 정보 구조체 타입  (DETAIL)

목록번호 책이름 출판사 가격 보유량

int number char name[40] char pub[20] int price int amount

Page 56: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

56최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

이진 파일 활용 알고리즘 (또는 플로우차트 )

– 1. 데이터를 초기화 한다 . » 1.1 목록 리스트를 만든다 . » 1.2 만들어진 목록리스트를 파일로 저장한다 . » 1.3 목록에 대한 세부정보들을 만든다 . » 1.4 세부정보를 파일로 저장한다 .

– 2. 검색 대상 선택 » 2.1 목록 리스트 파일로부터 리스트를 읽어와 화면에 출력 » 2.2 세부정보를 원하는 도서 목록 번호 입력

– 3. 세부 목록 출력 » 3.1 도서 목록 번호로 읽어올 세부 정보 선택 » 3.2 세부 정보 출력

– 4. 계속할 것인지 아닌지 여부 확인 » 4.1 계속 수행 할 경우 1,2,3번을 반복한다 . » 4.2 계속 수행 하지 않을 경우 프로그램 종료

Page 57: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

57최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

이진 파일 활용 프로그램 구조체차트

Page 58: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

58최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

이진 파일 활용 프로그램 작성

1 단계– 위에서 분석된 내용을 기반으로 페이지 359 에 존재하는

프로그램의 빈 부분을 완성하고 프로그램을 작성한 후 booksearch.c 파일로 저장하자 .

①. displayDetail(num) ②. list,sizeof(LIST),5,fp1 ③. details,sizeof(DETAIL),5,fp2 ④. fopen("list.bin","rb") ⑤. &line,sizeof(LIST),1,fp ⑥. fp,num*sizeof(DETAIL),SEEK_SET

Page 59: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

59최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

이진 파일 활용 2 단계

– 아래의 입력데이터에 대한 출력 결과를 작성해 보자 .

입력 조건 출력 결과

입력  :세부정보를 원하는 목록 번호  : 3

                                                    

                                                               

입력  :세부정보를 원하는 목록 번호  : 5

 

Page 60: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

60최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

파일 입출력

The End.