보이기/숨기기 가능합니다^^
분류 전체보기 (117)
임베디드 시스템 (3)
프로그래밍 (87)
웹프로그래밍 (22)
출사 (0)
가지고싶은물건! (4)
게시판 (1)
비밀글&사진 (0)
보이기/숨기기 가능합니다^^
'c_study'에 해당되는 글 2건
c_study09_14_2 파일입출력2
프로그래밍/c_study | 2008. 7. 21. 09:04

이어서...


문자열을 한번에 입출력하는 함수(fgets(), fputs())


1)문자열을 한번에 입력하는함수 fgets();

함수의 원형은 다음과 같다.

char *fgets(char *, int, FILE *)   //파일에서 문자열을 읽어 들인다.


이를 이용해서 예제를 보면


FILE *fp;           //파일포인터변수

char str[5];        //데이터를 입력 받을 배열

fp=fopen("a.txt", "r") //파일 개방

fgets(              str, sizeof(str),          fp);

                      ▲       ▲                  ▲

입력받을 배열의 배열명   입력 받을 바이트 수   파일포인터


더 자세한 설명은 fputs를 설명하고 예제를 통해서 설명하겠다.


2)문자열을 한번에 출력하는함수 fputs();

함수의 원형은 다음과 같다.

int fputs(char *, FILE *);       //파일로 문자열을 출력한다.


이를 이용해서 예제를 보면


FILE *fp;            //파일포인터변수

char str[]="orange";       //출력할 데이터가 저장된 배열, 초기화한다.

fp=fopen("b.txt", "w") //파일을 출력용으로 개방

fputs(                 str,   fp);

                          ▲    ▲

출력할 배열의 배열명   파일포인터



예제) 여러 줄의 문장을 한 줄로 출력하는 프로그램

 


#include<stdio.h>

#include<string.h>                  //strlen 함수를 사용하기 위한 헤더파일


int main(){

    FILE *ifp, *ofp;                  //파일 포인터변수 선언

    char str[80];                     //입력 받은 문자열을 저장할 배열

    char *res;                        //fgets 함수의 리턴값을 저장할 변수


    ifp=fopen("a.txt", "r");         //입력 파일을 읽기 전용으로 개방

    if(ifp==NULL){                   //개방 여부 확인

        printf("입력 파일 개방 실패. \n");

        return 1;

    }

    ofp=fopen("b.txt", "w");        //출력 파일을 쓰기 전용으로 개방

    if(ofp==NULL){                    //개방 여부 확인

        printf("입력 파일 개방 실패. \n");

        return 1;

    }

  

    while(1){                                       //데이터를 입력하고 출력하는 과정을 반복한다.

        res=fgets(str, sizeof(str), ifp);       //한 줄 입력

        if(res==NULL) break;                    //파일의 끝이면 반복을 종료한다.

        str[strlen(str)-1]='\0';                 //새줄 문자 제거

        fputs(str, ofp);                             //입력 받은 문자열을 출력한다.

        fputs("",ofp);                               //띄어 쓰기를 위한 공백 출력

    }


    fclose(ifp);                                     //입력 파일 닫기

    fclose(ofp);                                   //출력 파일 닫기

    return 0;

}


다양한 자료형에 맞게 입출력하자(fscanf, fprintf)

 

함수의 원형은 다음과 같다.

 

int fscanf(FILE *, char *, ....);   //파일에서 형식에 따라 데이터 입력

int fprintf(FILE *, char *, ....);   //파일로 형식에 따라 데이터 출력


예제를 통해서 살펴보면....


#include <stdio.h>

int main(){
 
 FILE *ifp, *ofp; //파일 포인터변수 선언
 char name[20];  //이름을 저장할 배열
 int age;   //나이를 저장할 변수
 double height;  //키를 저장할 변수
 int res;   //fscanf 함수의 리턴값을 저장할 함수

 ifp=fopen("a.txt","r");  //입력 파일을 읽기 전용으로 개방
 if(ifp==NULL){    //개방 여부 확인
  printf("입력 파일 개방 실패\n");
  return 1;
 }

 ofp=fopen("b.txt","w");  //출력 파일을 쓰기 전용으로 개방
 if(ofp==NULL){    //개방 여부 확인
  printf("출력 파일 개방 실패\n");
  return 1;
 }

 while(1){    
  res=fscanf(ifp, "%s%d%lf",name, &age, &height);  //각 데이터의 형태에 맞게 입력한다.
  if(res==EOF){    //데이터의 입력이 끝나면 반복 종료
   break;
  }
  fprintf(ofp, "%.1lf %d %s\n", height, age, name); //출력 형식에 맞게 파일에 출력한다.
 }

 fclose(ifp);  //입력 파일 닫기
 fclose(ofp);  //출력 파일 닫기
 return 0;
}

:
위로
c_study09_14_1 파일입출력
프로그래밍/c_study | 2008. 7. 14. 18:26

파일개방 함수 fopen();


fopen함수의 원형은 다음과 같다.


FILE *fopen(const char *filename, const char *mode);


사용예) fopen("a.txt", "w");   //파일 개방 함수 호출

                       ▲      ▲

 개방할 파일 이름     출력 전용(write)으로 개방


FILE 구조체를 살펴보면

 

 struct _iobuf{     //버퍼의 상태를 포함하여 스트림파일에 필요한 여러 가지

     char *_ptr;       정보를 담고 있다.

     int     _cnt;

    char  *_base;

    int      _flag;

     int     _file;

     int     _charbuf;

     int     _bufsiz;

     char *_tmpfname;

 };

 typedef struct _iobuf FILE; //_iobuf 구조체를 FILE로 재정의하여 사용한다.

 

 

이를 이용해 파일을 개방을 하면

 

FILE *fp;

fp = fopen("a.txt", "r")                  //읽기 전용으로 파일 개방

if(fp == NULL){                           //파일이 개방되지 않았으면 조건식은 참

         printf("파일이 없습니다."); //안내 메시지 출력하고

         return 1;                          //종료한다.

}

 

기본적인 개방 모드를 간단히 표로 정리하면

개방 모드 파일이 있을 때 파일이 없을 때
r 읽기 위해 개방 널 포인터 리턴
w 파일의 내용을 삭제하고 쓰기 위해 개방 새로운 파일 생성
a 파일의 끝에 추가하기 위해 개방 새로운 파일 생성



개방한 파일은 fclose 함수로 닫는다.

 

위에 소스를 수정해서 파일을 닫으면...

 

FILE *fp;

fp = fopen("a.txt", "r")                  //읽기 전용으로 파일 개방

if(fp == NULL){                           //파일이 개방되지 않았으면 조건식은 참

         printf("파일이 없습니다."); //안내 메시지 출력하고

         return 1;                          //종료한다.

}

fclose(fp);                                 //개방했던 파일을 닫는다.

 

 

파일 입출력 과정(fgetc,fputc)

 

1)하나의 문자를 파일로부터 입력하는 함수 fgetc();

   함수의 원형은 다음과 같다.

   int fgetc(FILE *);       //파일에서 하나의 문자를 가져온다.

  

위에 소스를 수정해서 파일로부터 하나의 문자를 입력받으면...

 

FILE *fp;

char ch;                                   //파일포인터변수 선언

fp = fopen("a.txt", "r")                  //읽기 전용으로 파일 개방

if(fp == NULL){                           //파일이 개방되지 않았으면 조건식은 참

         printf("파일이 없습니다."); //안내 메시지 출력하고

         return 1;                          //종료한다.

}

ch=fgetc(fp);                     //개방한 파일로부터 문자 입력

printf("입력한 문자 : %c\n", ch);     //입력한 문자를 화면에 출력한다.

fclose(fp);                                 //개방했던 파일을 닫는다.

return 0;

 

2)하나의 문자를 파일에 출력하는 함수 fputc();

 함수의 원형은 다음과 같다.

   int fputc(FILE *);       //하나의 문자를 파일로 출력한다.

 

예제로 설명하자면

 

#include <stdio.h>

int main(){

   FILE *fp;         //파일포인터변수 선언

   char ch;         //입력 받는 문자를 저장할 변수

 

  fp=fopen("b.txt", "w");     //쓰기 전용으로 파일 개방

  if(fp==NULL){                //파일이 개방되었는지 확인한다.

     printf("파일 개방 실패. \n");

     return 1;

  }

  printf("데이터를 입력하세요. \n");       //입력 안내 메시지

 

 while(1){             //무한반복

   ch=getchar();      //키보드로부터 한 문자를 입력한다.

   if(ch==EOF){       //ctrl+z키 입력하면 반복 종료

       break;           

   }

   fputc(ch, fp);       //읽어 들인 문자를 파일에 출력한다.

}

fclose(fp);               //파일을 닫는다.

}

 

여기서 문제를 내겠습니다. 우리가 한번 했던 예제이고여. 책에 537쪽에 있는 Exercise 18-1입니다.

 

문제)

텍스트 뷰어 만들기

하드디스크에 있는 텍스트 파일의 내용을 3줄씩 화면에 출력하는 텍스트 뷰어(vie
wer)를 만들어 봅시다. 텍스트 파일의 모든 데이터는 한 줄에 작성된 것입니다.

사용자 삽입 이미지

결과물)

사용자 삽입 이미지
 



다음에는 fgets,fputs,fscanf,fprintf,fflush 에 대해 알아보겠습니다.

:
위로
이전 페이지
[1]
다음 페이지
보이기/숨기기 가능합니다^^
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
보이기/숨기기 가능합니다^^
보이기/숨기기 가능합니다^^
보이기/숨기기 가능합니다^^
RSSFeed