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); }
'방송통신대학 > C 프로그래밍' 카테고리의 다른 글
메모리 정적할당static aloocation (1) | 2020.06.24 |
---|---|
순차 파일의 레코드 추가 (0) | 2020.06.21 |
순차 파일 putc() fputs() fprintf() (0) | 2020.06.19 |
파일처리함수 (fclose, 파일 닫기) (0) | 2020.06.18 |
파일처리함수 (1) | 2020.06.17 |