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