<개인공부>/[C언어, C++]

[C언어/C++] fputc, fgetc 함수에 대해서

BlockDMask 2020. 6. 16. 12:40
반응형

안녕하세요. BlockDMask 입니다.

지난시간에는 파일을 열고 닫을 수 있는 파일 입출력함수 fopen, fclose 함수에 대해서 알아보았는데요.

오늘은 그 파일들을 열어서 파일의 내용을 읽고 파일에 내용을 보낼수 있는 그런 함수에 대해서 알아보려고 합니다.

문자를 하나씩 하나씩 하나씩 읽을 수 있는 함수 fputc, fgetc 입니다.


▶ c언어와 c++에서 파일을 열고 닫을 수 있는 함수 fopen, fclose 에 대해서 알고싶다면 [바로가기]

▶ c++에서 파일을 열고 닫고 할 수 있수 있는 함수들을 모아놓은 ofstream, ifstream에 대해서 알고싶다면 [바로가기]


<목차>

1. fputc, fgetc 함수 원형과 매개변수들 및 간단한 사용법. 

2. 파일 입출력 함수 fputc. fgetc 함수 예제

    (1) 파일에 문자를 하나하나씩 쓰고 싶을때.

    (2) 파일에서 문자를 하나하나씩 읽어올때. 



1. 파일 입출력 함수 fputc, fgetc 원형과 매개변수들 및 간단한 사용법


 fputc 함수

함수원형 : int fputc(int c, FILE* pFile);


File + Put + Character 를 조합한 글자 입니다.

파일에 Put 쓴다. 준다. character 를

즉, 파일에 문자를 하나씩 쓰는 함수 입니다.


함수설명

첫번째 인자 : 넣을 문자 혹은 숫자. 아스키 코드표에 맞게 들어갑니다. 그렇기 때문에 int 로 받는것입니다.

두번째 인자 : 다룰 파일의 파일 포인터를 받습니다. fopen 에서 반환받은거 있죠? 그거 입니다.

반환형 : 성공시 해당문자, 실패시 EOF


다시 말로 설명하자면 이렇습니다.

파일에 넣을 문자 혹은 숫자를 첫번째 인자에 넣고, 두번째 인자에 있는 파일포인터가 가리키는 파일에 넣습니다.

파일에 문자를 넣는게 성공하면 해당 문자를 반환합니다. (왜 반환 하는진 모르겠네요)

파일에 문자를 넣는걸 실패하면 EOF 즉, -1을 반환합니다.


이렇게 사용합니다.

파일에 'b'를 쓴다고 생각하면, 파일을 w 모드로 열고 그 파일에 fputc 를 이용하여 문자를 집어넣습니다.

FILE* pFile = fopen("test.txt", "w");   //write mode로 파일 열기

fputc('b', pFile);                                   //파일에 'b' 넣기

fclose(pFile);                                        //파일 닫기




▶ fgetc  함수는

함수원형 : int fgetc(FILE* pFile);


File + Get + Character를 조합한 글자로 파일에서부터 글자를 하나하나 읽는다는 뜻의 함수 입니다. 실제 동작도 그렇구요.


함수설명

첫번째 인자 : 접근할 파일포인터 입니다.

반환형 : 읽어온 문자를 반환합니다. int 타입입니다. char 타입으로 받으면 아스키 코드 표를 따라서 문자로 인식하게 됩니다.

파일의 끝까지 가게 되면 EOF를 반환합니다. EOF는 언어상에서 이미 -1을 #define 해놓은 것 입니다. 파일의 끝일땐 저걸 반환한다고 미리 정해놓은 것 입니다.


파일을 읽을때는 파일의 파일 지시자를 기준으로 파일을 읽게 되는데 쉽게 말해서 우리 텍스트 파일에 읽을때 보이는 커서 같은것 이라고 생각하면됩니다.

어디를 읽을지 기준점 이라 생각하면됩니다.


fgetc의 함수동작.

함수의 동작은  pFile의 파일지시자가 가리키는 파일의 위치, 커서에서 해당 문자를 읽어서 반환하고, 

하나의 글자를 읽고 파일 지시자를 한칸 뒤로 움직이는 역할을 하고 있습니다.

즉 한글자 읽고 그 다음글자 읽을 준비를 시키는 함수 입니다. 

그러면 우리는 EOF를 반환할때까지 fgetc 함수를 계속 호출해주면 파일의 처음부터 끝까지 읽을 수 있습니다.


FILE* pFile = fopen("test.txt", "r");  //read mode로 파일 열기

char c = fgetc(pFile);                     //해당 파일로 부터 한글자 읽어오기.

fclose(pFile);                                    //파일 닫기


그럼 계속해서 여러 글자를 읽어올땐 반복문을 쓰면 되겠죠? 그 방법은 아래에서 예제로 보여드리겠습니다.



2. fputc. fgetc 함수 예제


(1) 파일에 문자들을 하나하나 쓰고 싶을때 (fputc)


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
31
32
33
34
35
36
37
38
39
#include<stdio.h>
int main(void)
{
    FILE* pFile = fopen("test.txt""w"); //wrtie mode 로 파일을 열어요.
    
    //파일에 문자를 하나씩 넣습니다.
    fputc('b', pFile);
    fputc('l', pFile);
    fputc('o', pFile);
    fputc('c', pFile);
    fputc('k', pFile);
    fputc('d', pFile);
    fputc('m', pFile);
    fputc('a', pFile);
    fputc('s', pFile);
    fputc('k', pFile);
 
    //근데 누가 위처럼 하나씩 넣나요 반복문을 이용해야지
    //아래처럼 문자열이 있다고 할때 이렇게 반복문을 이용하면 됩니다.
    char arr[100= "\nThis is BlockDMask Blog.\nfputc example.";
    int i = 0;
    while(true)
    {
        char c = arr[i];
        if(c == '\0')
        {
            //문자열의 끝을 알리는 '\0' 이게 나오면 문자열끝이므로. 멈춘다.
            break;
        }
 
        //문자열의 끝이 아니면 파일에 문자를 넣습니다.
        fputc(c, pFile);
        ++i;
    }
    
    //파일에 넣을거 다 넣었으니 이제 닫습니다.
    fclose(pFile);
    return 0;
}
cs


위 예제를 실행하면 test.txt 파일이 생기고 안에 우리가 넣은 문자열이 들어가 있을 겁니다.

확인해볼까요??


이렇게 fputc를 통해서 파일에 하나씩 하나씩 해서 넣을수 있어요. 잘들어갔네요.


(2) 파일의 끝까지 한번 읽어봅시다. (fgetc)


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
#include<stdio.h>
int main(void)
{
    //read mode 로 파일을 열어요.
    FILE* pFile = fopen("test.txt""r");
    if(pFile == NULL)
    {
        //파일이 없네요? 파일 만드세요. 프로그램 끕니다.
        return 0;
    }
 
    while(true)
    {
        char c = fgetc(pFile);
        if(c == EOF)
        {
            //파일의 끝을 알리는 EOF를 반환하면 break!
            break;
        }
 
        //fputc를 이렇게 쓸수도 있어요. stdout으로 하면 printf로 출력하는것과 같습니다.
        //fputc(c, stdout); 이것도 가능!
        printf("%c", c);
    }
    
    //파일에서 읽을거 다 읽었으니 이제 닫을까요
    fclose(pFile);
    return 0;
}
cs


파일에 있는 내용을 읽어와서 printf로 콘솔에 찍어봤습니다.

결과를 한번 볼까요 ??

우리가 아까 text.txt 파일에 넣은것을 그대로 잘 읽어온 것을 확인 할 수 있습니다.


이상으로 파일에서 부터 문자를 하나씩 읽어오고 파일에 문자를 하나씩 입력하는 함수 fputc, fgetc 함수에 대해서 알아보았습니다.

감사합니다.



반응형