학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

파일 입출력

학습목표

파일 포인터를 이용한 입출력을 배운다.

학습주제

파일에 저장되어 있는 성적을 읽고 합계를 내는 프로그램을 만든다.

예습내용

 

FILE *파일포인터명;

…..

파일포인터명=fopen(“파일명”,”모드”);

…..

fclose(파일포인터명);

 

 

 

 

 

 

FILE 이용하여 파일 포인터를 선언하고 fopen,fclose 파일을 열고 닫는다. 파일의 입출력은 텍스트모드와 이진모드 가지가 있다.

텍스트 모드

r

읽기(read)

w

쓰기(write)

a

추가(append)

r+

읽고 쓰기 (파일을 연다)

w+

읽고 쓰기 (파일을 생성한다)

a+

추가를 위해 읽고 쓰기

 

이진 모드

rb, wb, ab

이진파일의 r, w, a 처리

R+b 또는 rb+

이진파일의 r+ 처리

w+b 또는 wb+

이진파일의 w+ 처리

a+b 또는 ab+

이진파일의 a+ 처리

 

“stdio.h”에는 파일에서 데이터를 읽고 쓸수 있는 함수가 포함되어 있다. 아래 중요함수에 설명되어 있다.

 

실습방법

   

1. 읽기

다음은 입력 파일 “test.dat” 있는 데이터를 읽는 프로그램 예제이다.

입력파일: test.dat

0 1 2 3 4 5 6 7 8 9

 

 

예제1

파일(test.dat)에서 10개의 정수를 읽는 프로그램

#include "stdafx.h"

#include <stdio.h>

 

int main(int argc, char* argv[])

{

              FILE *f;   

              int i,data[10];         

              f = fopen("test.dat","r");                       

              for(i=0;i<10;i++)                                 

                             fscanf(f,"%d",&data[i]);         

              fclose(f); 

//화면 출력           

              for(i=0;i<10;i++)                   

                             printf("%d ",data[i]);

              return 0;

}

0 1 2 3 4 5 6 7 8 9

 

2. 쓰기

예제2

파일(test.dat) 0~10까지 10개의 정수를 쓰는 프로그램

#include "stdafx.h"

#include <stdio.h>

 

int main(int argc, char* argv[])

{

              FILE *f;   

              int i;       

 

              f = fopen("test.dat","w");                     

              for(i=0;i<10;i++)                                 

                             fprintf(f,"%d ",i);     

              fclose(f);

 

              return 0;

}

 

처음

   

위의 예제를 응용하여 10명의 국어, 영어, 수학의 성적을 파일에서 입력 받아 합계를 계산하고 결과를 파일로 출력하는 프로그램을 만드시오. (지난주의 과제에서 입력과 출력을 파일을 이용한 프로그램으로 만든다.)

입력파일-in.dat  출력파일-out.dat

예제3 성적 프로그램

빨간색 글씨는 수정한 부분이다. 파란색 글씨를 수정하여 포인터를 이용한 함수로 완성하시오.

#include "stdafx.h"

#include "stdio.h"

#include "iostream.h"

 

void Input(int *kor,int *eng, int total);

void Calculate(int kor[],int eng[], int sum[], int total);

void Output(int kor[],int eng[], int sum[], int total);

 

int main(int argc, char* argv[])

 

{

              int kor[3],eng[3],sum[3];

              float ave[3];

 

              Input(&kor[0],&eng[0],3);

              Calculate(&kor[0],&eng[0],&sum[0],3);

              Output(&kor[0],&eng[0],&sum[0],3);

 

              return 0;

}

 

void Input(int *kor,int *eng, int total)

{            

              FILE *f;                 

              int i;                     

              f = fopen("in.dat","r");                                        

              for(i=0;i<total;i++)

                             fscanf(f,"%d %d",&kor[i],&eng[i]);

              fclose(f);

}

 

void Calculate(int kor[],int eng[], int sum[], int total)

{

              int i;

              for(i=0;i<3;i++)

                             sum[i]=kor[i]+eng[i];

}

 

void Output(int kor[],int eng[], int sum[], int total)

{

              FILE *f;                 

              int i;                     

              f = fopen("out.dat","w");                                     

              // 이곳에 “fprintf” 결과를 쓰는 프로그램 완성

              fclose(f);

}

중요함수

 

 

fgetc()

파일에서 문자 입력

fputc()

파일에서 문자 출력

fgets()

파일에서 지정된 바이트 만큼 배열 변수에 입력

fputs()

파일에서 문자열을 출력

fscanf()

파일에서 정해진 양식대로 입력

fprintf()

파일에서 정해진 양식대로 출력