C & C++/C언어 표준 라이브러리 함수

fgetc 함수, getc 매크로 함수 [C언어 표준 라이브러리 함수]

언휴 2024. 1. 31. 16:09

 

fgetc 함수 [C언어 표준 라이브러리 함수]

 

int fgetc(FILE *fp); 파일 스트림의 버퍼에서 맨 앞의 문자의 ASCII 코드 값을 반환하는 함수

입력 매개 변수 리스트

fp 입력 파일 스트림

반환 값

성공 시 읽은 문자, 실패 시 EOF를 반환하고 error를 설정

fgetc 함수 호출 결과가 EOF일 때는 읽은 문자가 파일의 끝을 의미하는 EOF이거나 읽기 오류일 때입니다. 따라서 EOF를 반환했다고 반드시 읽기 실패가 아닙니다. 읽기 실패일 때는 error 플래그를 설정하므로 ferror로 확인해야 에러인지 아닌지 판단할 수 있습니다.

사용 예

사용 예
//C언어 표준 라이브러리 함수 가이드
// int fgetc(FILE *fp); 파일 스트림의 버퍼에서 맨 앞의 문자의 ASCII 코드 값 반환
//input.txt 파일의 내용을 읽어 라인 번호를 추가하여 표준 출력 스트림에 출력
#include <stdio.h>
int main(void)
{
    FILE * fp;
    int ch;
    int line_no = 0;

    fopen_s(&fp, "input.txt", "rt");//읽기 모드로 파일 열기
    if (fp == NULL) //열기 실패
    {
        perror("error fopen");
        return;
    }

    line_no++;
    printf("%4d: ", line_no);//라인번호 출력
    while (!feof(fp))//파일의 끝을 만나지 않았다면 반복
    {
        ch = fgetc(fp);//파일에서 하나의 문자를 읽음
        putchar(ch);//표준 출력 스트림에 문자 출력
        if (ch == '\n')//개행 문자일 때
        {
            line_no++;//라인 번호 1 증가
            printf("%4d: ", line_no);//라인 번호 출력
        }
    }
    fclose(fp);//파일 스트림 닫기
    printf("\n");
    return 0;
}

input.txt 내용

안녕하세요. 
언제나 휴일 커뮤니티 사이트입니다.
C언어 표준 라이브러리 함수 가이드 집필을 시작하였습니다.
여러분의 많은 관심 바랍니다.
2015년 10월 23일

출력

   1: 안녕하세요. 
   2: 언제나 휴일 커뮤니티 사이트입니다.
   3: C언어 표준 라이브러리 함수 가이드 집필을 시작하였습니다.
   4: 여러분의 많은 관심 바랍니다.
   5: 2015년 10월 23일
int getc(FILE *fp); 파일 스트림의 버퍼에서 맨 앞의 문자의 ASCII 코드 값을 반환하는 매크로 함수

입력 매개 변수 리스트

fp 입력 파일 스트림

반환 값

성공 시 읽은 문자, 실패 시 EOF를 반환하고 eror를 설정

사용 예는 fgetc 사용 예와 차이가 있는 부분은 fgetc 함수 호출을 getc로 바꾼 것입니다. getc 함수가 fgetc 함수를 래핑한 매크로 함수이므로 실제 동작에 둘은 차이가 없습니다.

사용 예

//C언어 표준 라이브러리 함수 가이드
//int getc(FILE *fp); 파일 스트림의 버퍼에서 맨 앞의 문자의 ASCII 코드 값을 반환하는 매크로 함수
//input.txt 파일의 내용을 읽어 라인 번호를 추가하여 표준 출력 스트림에 출력

#include <stdio.h>
int main(void)
{
    FILE * fp;
    int ch;
    int line_no = 0;

    fopen_s(&fp, "input.txt", "rt");//읽기 모드로 파일 열기
    if (fp == NULL) //열기 실패
    {
        perror("error fopen");
        return;
    }

    line_no++;
    printf("%4d: ", line_no);//라인번호 출력
    while (!feof(fp))//파일의 끝을 만나지 않았다면 반복
    {
        ch = getc(fp);//파일에서 하나의 문자를 읽음
        putchar(ch);//표준 출력 스트림에 문자 출력
        if (ch == '\n')//개행 문자일 때
        {
            line_no++;//라인 번호 1 증가
            printf("%4d: ", line_no);//라인 번호 출력
        }
    }
    fclose(fp);//파일 스트림 닫기
    printf("\n");
    return 0;
}

input.txt 내용

안녕하세요. 
언제나 휴일 커뮤니티 사이트입니다.
C언어 표준 라이브러리 함수 가이드 집필을 시작하였습니다.
여러분의 많은 관심 바랍니다.
2015년 10월 23일

출력

   1: 안녕하세요. 
   2: 언제나 휴일 커뮤니티 사이트입니다.
   3: C언어 표준 라이브러리 함수 가이드 집필을 시작하였습니다.
   4: 여러분의 많은 관심 바랍니다.
   5: 2015년 10월 23일