Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ ungetc() 함수 완벽 정리: 스트림에서 읽은 문자 되돌리기

ungetc() 함수는 스트림에서 이미 읽은 문자를 다시 입력 스트림에 되돌려(push back) 넣어, 해당 문자를 한 번 더 읽을 수 있도록 해주는 C 표준 라이브러리 함수입니다.

C 언어에서 ungetc() 함수의 기본 구문은 다음과 같습니다.

int ungetc(int character, FILE *stream)

매개변수

  • character − 입력 스트림에 되돌릴 문자입니다.
  • stream − 파일 객체(FILE)를 가리키는 포인터입니다.

반환값

성공하면 되돌린 문자를 반환하고, 실패하면 EOF를 반환합니다.

예제

#include <stdio.h>
int main() {
    int c;
    while ((c = getchar()) != '0')
        putchar(c);
    ungetc(c, stdin);
    c = getchar();
    putchar(c);
    puts("");
    printf("The End!");
    return 0;
}

실행 결과

s a b c t h 0
The End!

코드 설명

위 프로그램에서는 int형 변수 c를 선언한 뒤, getchar()로 문자를 하나씩 읽으며 '0'을 만날 때까지 반복합니다. 반복문이 진행되는 동안 읽은 모든 문자는 putchar()를 통해 화면에 출력됩니다.

int c;
while ((c = getchar()) != '0')
putchar(c);
ungetc(c, stdin)
c = getchar();
putchar(c);
puts("");
printf("The End!");

'0'을 만나 반복문이 종료되면, ungetc()가 마지막으로 읽은 문자 '0'을 표준 입력 스트림(stdin)에 되돌립니다. 이후 다시 getchar()를 호출하면 되돌려진 '0'을 한 번 더 읽어 출력할 수 있습니다. 마지막으로 줄바꿈 후 "The End!"를 출력하고 프로그램이 종료됩니다.

ungetc()의 대표적인 활용 사례

  • 토큰 분석(파싱) − 숫자나 단어를 읽다가 구분자를 한 문자 미리 읽어버린 경우, 해당 문자를 되돌려 다음 처리 단계에서 활용할 수 있습니다.
  • 입력 미리 보기(lookahead) − 다음 문자를 먼저 확인한 후 조건에 맞지 않으면 원래대로 되돌리는 방식으로 입력을 유연하게 처리할 수 있습니다.

주의 사항

표준 C 규격은 최소 1개의 문자 되돌리기를 보장하지만, 여러 문자를 연속해서 되돌리는 것은 컴파일러나 환경에 따라 지원되지 않을 수 있습니다. 또한 ungetc()는 파일 위치 표시자(file position indicator)를 한 칸 뒤로 이동시키므로, 되돌린 문자를 다시 읽으면 동일한 문자를 얻게 됩니다.