본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 ungetc 함수 마지막 읽은 문자 반환

C언어 ungetc 함수 마지막 읽은 문자 반환

· 댓글개 · 바다야크

C ungetc 마지막 읽은 문자 반환 함수

파일에서 읽어 들인 마지막 문자를 다시 읽을 수 있도록 해줍니다.

  • 헤더: stdio.h
  • 형태: int ugetc( int c, FILE *stream);
  • 인수: int c 되돌릴 문자
    FILE *stream 대상 파일 스트림
  • 반환: int 되돌린 문자를 반환하며 오류가 발생하면 -1을 반환

파일에서 읽어 들인 마지막 문자를 다시 읽을 수 있도록 해 준다는 얘기인데, 설명보다는 예를 들어보겠습니다. 파일에 아래의 내용이 있습니다.

http://badayak.com

파일 내용에서 'b'로 시작해서 이후 문자까지 읽어 들이려 합니다. 즉, badayak.com을 구하려고 합니다.

이렇게 하려면 파일을 열고 fgetc()로 문자를 하나씩 읽어서 'b' 자 인지를 확인합니다. 'b'를 만나면 버퍼로 읽어 들이면 되는데, 문제는 첫 번째 'b'자를 이미 읽었기 때문에 그냥 읽으면 adayak.com으로 'b'가 빠집니다. 해결하는 방법은 마지막으로 읽어 들인 위치로 읽기 위치를 되도록 주면 되겠습니다. ungetc()를 사용하면 fgetc()로 읽어 들인 문자 하나를 반환하면서 파일 읽기 위치도 되돌아 갑니다.

참고: 인수 중 되돌릴 문자에 대한 설명

이전 위치로 읽기를 돌리면서 그 위치의 버퍼 내용을 채울 문자입니다. 예를 들어 파일 내용이 "wolf"이고 첫 번째 'w'를 읽었다면 ungetc( 'W', fp)를 실행하여 소문자가 아닌 대문자 "W"로 반환하고 다시 파일을 읽어 들이면 "Wolf"로 읽게 됩니다. 그러나 파일 내용이 바뀌지는 않습니다.

C언어 ungetc() 함수 예제

아래 예제 내용을 test.c로 저장했습니다. 실행하면 test.c의 내용 중 'c'로 시작하는 행을 찾고 'c'에서부터 문자열을 출력합니다.

include <stdio.h>

int main( void)
{
   FILE    *fp_sour;
   char     buff[1024];
   char     ch_byte;

   fp_sour  = fopen( "./test.c"  , "r");

   while( EOF != ( ch_byte = fgetc( fp_sour))){
      if ('s' == ch_byte){
         ungetc( 'c', fp_sour);
         fgets( buff, 1024, fp_sour);
         printf( "%s", buff);
      }
   }
   fclose( fp_sour);
   return 0;
}

C언어 ungetc() 함수 예제 실행 결과

]$ ./a.out
ctdio.h>
cour;
cour  = fopen( "./test.c"  , "r");
cour))){
c' == ch_byte){
cour);
c( buff, 1024, fp_sour);
c", buff);
ce( fp_sour);
]$
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.