C,C++ & Linux

C/C++ ungetc(3)

KyooDong 2020. 5. 22. 01:56
728x90

함수 기능

읽었던 문자를 다시 버퍼에 넣어주는 함수입니다.

버퍼에 다시 넣은 문자는 이후 getc, fgetc 등의 함수로 다시 읽어낼 수 있습니다.

함수 원형

#include <stdio.h>

int ungetc(int c, FILE *fp);

 

매개변수

c

다시 넣을 문자

 

fp

문자를 다시 넣을 파일

반환값

성공 시 c 리턴

에러 시 EOF 리턴

예제

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void printOp(FILE *fp) {
	// 한 글자 읽어서 출력
    char op = fgetc(fp);
    printf("Operator => %c\n", op);
}

int main(int argc, char *argv[]) {
    char op;
    FILE *fp;
    int character;
    int number = 0;

    if ((fp = fopen("expr.txt", "r")) == NULL) {
        fprintf(stderr, "fopen error\n");
        exit(1);
    }

	// 파일의 끝까지 읽어들임
    while (!feof(fp)) {
		// 숫자들을 계속 읽어들임
        while ((character = fgetc(fp)) != EOF && isdigit(character)) {
            number = 10 * number + character - 48;
        }

		// 숫자 출력
        fprintf(stdout, " %d\n", number);
        number = 0;

		// 마지막으로 읽은 character 는 연산자이므로
        if (character != EOF) {
			// 연산자를 다시 버퍼에 넣어주고
            ungetc(character, fp);
			
			// 함수호출
            printOp(fp);
        }
    }
    exit(0);
}

 

결과

 

 

 

 

 

 

 

 

 

 

리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)