반응형
SMALL

8.3.2 순차 파일 읽기

- 파일 출력함수에 의해 만들어진 순차파일의 저장된 자료를 읽어 내는 함수

- 자료를 읽을때는 파일의 끝에 있는 EOP 신호를 만날 때까지 읽을 수 있는 프로그램 작성

 

getc() , fgetc(), fgets(), fscanf()

 

(1) getc() 함수 

> 문자 단위의 파일 입력함수

> fgetc() 함수와 유사

 

- 형식  : getc( 파일포인터변수):

- 사용 예 : c = getc(fp);

- 기능 : 지정된 파일로부터 한 문자를 읽어온다.

 

// getc() 함수의 사용 예 [8.3.1 (1) 에 쓴 파일 읽어오기]

#include<stdio.h>  
#include<stdlib.h>  
void main(){  
FILE*fp;  
char c;  
fp=fopen("sample.txt","r"); // ---->  sample 텍스트 파일을 릭기 모드로 개방 
if(fp==NULL){ 
printf("파일을 개방할 수 없습니다!"); 
exit(1); } 
while((c=getc(fp))!=EOF)    // ----- > getc() 함수에 의해 한 문자씩 읽어와 c에 전 달 
putchar(c); 
fclose(fp); }

 

(2) fgets() 함수

> 파일에 저장된 문자열 자료를 읽을 때 사용

> 읽어 낼 문자열의 길이를 반드시 명시

 

- 형식 : fgetc(문자열변수, 문자열 길이 +1, 파일포인터변수);

- 사용 예 : fgets(s, 40, fp):

- 기능 : 지정된 파일로부터 해당 문자열 길이만큼의 문자를 읽어와 문자열 변수에 저장한다.

 

//fgetc() 함수의 사용 예  (8.3.1. (2)fgets() 읽어오기)

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void main(){
     char name[64];

     FILE *fp;

     if((fp = fopen("sample2.txt:, "r" )) == NULL){

     //sample2.txt 파일을 읽기 모드로 개방하고, 에러 발생 시 메시지 출력

          puts("파일을 개방할 수 없습니다.");

          exit;  }

     while((fgets(name, 20, fp)!=NULL)) // 파일 끝에 도달할 때까지 읽기 계속

          printf("%s", name);

     // 레코드의 끝에 이미 '\n'이 저장되어 있으므로 개행문자 '\n'을 넣지 않아도 됨

     fclose(fp);  } 

 

(3) fscanf() 함수

> 숫자, 문자 등 복합적인 자료로 구성된 레코드를 읽을 때 사용

> 일반적으로 파일의 끝을 판별하는 feof() 함수와 같이 사용

 

- 형식 : fscanf(파일 포인터 변수, "입력 형식", 변수들);

- 사용 예 : fscanf(fp, "%s %d", &a, &b);

- 기능 : 파일 포인터가 가리키는 곳으로부터 지정된 형식대로 자료를 읽어 온다.

 

//fscanf()함수의 사용 예   (8.3.1. (3)fprintf() 읽어오기)

#include <stdio.h>

#include <stdlib.h> 

void main(){

     FILE *fp;

     char no[10], name[10];

     int mid, term, rep, att, i;

     fp = fopen("sample3.txt", "r");

     if(fp == NULL){

          printf("파일을 개방할 수 없습니다!");

          exit(1);  }

      printf("학번          이름     중간 기말 리포트 출석\n ");

      while(!feof(fp)) {

// 파일 끝 검사를 위해 feop() 함수 사용, 0인 동안 loop 계속

     fscanf(fp, "%10s %8s %4d %4d %4d \n", no, name, &mid, &term, &rep, &att);

// 파일에 저장된 자료의 형식에 맞게 입력 형식을 지정해야 함

     printf("%-10s %-8s %4d %4d %4d %4d \n", no, name, mid, term, rep, att);; }

// 화면에 출력하기 위해 출력 형식으로 지정

     fclose(fp);   } 

 

 

반응형
LIST

+ Recent posts