ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ ungetc(3)
    C,C++ & Linux 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

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

    'C,C++ & Linux' 카테고리의 다른 글

    C/C++ gets(3), fgets(3)  (0) 2020.05.22
    C/C++ putc(3), fputc(3), putchar(3)  (0) 2020.05.22
    C/C++ ferror(3) feof(3) clearerr(3)  (0) 2020.05.21
    C/C++ getc(3) fgetc(3) getchar(3)  (0) 2020.05.21
    C/C++ fflush(3)  (0) 2020.05.21

    댓글

Designed by Tistory.