ungetc, ungetwc

스트림에 문자를 다시 푸시합니다.

구문

int ungetc(
   int c,
   FILE *stream
);
wint_t ungetwc(
   wint_t c,
   FILE *stream
);

매개 변수

c
푸시할 문자 수입니다.

stream
FILE 구조체에 대한 포인터입니다.

반환 값

성공하면 이러한 각 함수는 문자 인수 c를 반환합니다. 다시 푸시할 수 없거나 읽은 문자가 없으면 c 입력 스트림이 변경되지 않고 반환 EOFungetwcWEOF됩니다.ungetc 이 경우 stream 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출NULL됩니다. 실행을 계속 EOF 하도록 허용되거나 WEOF 반환 errnoEINVAL되고 .

이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno, _sys_errlist_sys_nerr.를 참조하세요errno.

설명

ungetc 함수는 c 문자를 stream에 다시 푸시하고 파일 끝 표시기를 지웁니다. 이때 스트림이 읽기를 위해 열려 있어야 합니다. 에 대한 stream 후속 읽기 작업이 시작됩니다 c. ungetc를 사용하여 스트림에 EOF를 푸시하려는 시도는 무시됩니다.

ungetc에 의해 스트림에 배치되는 문자는 스트림에서 해당 문자를 읽기 전에 fflush, fseek, fsetpos 또는 rewind를 호출하는 경우 지워질 수 있습니다. 파일 위치 표시기에는 문자가 다시 푸시되기 전의 값이 지정됩니다. 스트림에 해당하는 외부 스토리지는 변경되지 않습니다. 텍스트 스트림에 대해 ungetc가 정상적으로 호출되어도 다시 푸시된 모든 문자를 읽거나 삭제할 때까지 파일 위치 표시기는 지정되지 않습니다. 이진 스트림에 대해 각 ungetc를 정상적으로 호출하면 파일 위치 표시기가 감소합니다. 호출 전에 표시기의 값이 0이었다면 호출 후에는 값이 정의되지 않습니다.

두 호출 사이에 읽기 또는 파일 배치 작업이 수행되지 않은 상태로 ungetc를 두 번 호출하는 경우의 결과는 예측할 수 없습니다. 호출 fscanf후에는 호출 자체가 호출되기 ungetc 때문에 fscanf 다른 읽기 작업(예: getc)이 수행되지 않는 한 호출ungetc이 실패할 수 있습니다.

ungetwcungetc의 와이드 문자 버전입니다. 그러나 텍스트 또는 이진 스트림에 대해 각 ungetwc가 정상적으로 호출되어도 다시 푸시된 모든 문자를 읽거나 삭제할 때까지 파일 위치 표시기는 지정되지 않습니다.

이러한 함수는 스레드로부터 안전하며, 실행 중에 중요한 데이터를 잠급니다. 잠금이 아닌 버전은 다음_ungetwc_nolock을 참조하세요_ungetc_nolock.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT의 전역 상태를 참조하세요.

일반 텍스트 루틴 매핑

TCHAR.H 루틴 _UNICODE 정의 _MBCS 되지 않음 _MBCS 정의 _UNICODE 정의
_ungettc ungetc ungetc ungetwc

요구 사항

루틴에서 반환된 값 필수 헤더
ungetc <stdio.h>
ungetwc <stdio.h> 또는 <wchar.h>

콘솔은 UWP(유니버설 Windows 플랫폼) 앱에서 지원되지 않습니다. C 런타임 함수가 UWP 앱에서 사용할 수 있기 전에 콘솔stdinstdout, 및 , 및stderr와 연결된 표준 스트림 핸들을 리디렉션해야 합니다. 호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// crt_ungetc.c
// This program first converts a character
// representation of an unsigned integer to an integer. If
// the program encounters a character that is not a digit,
// the program uses ungetc to replace it in the  stream.
//

#include <stdio.h>
#include <ctype.h>

int main( void )
{
   int ch;
   int result = 0;

   // Read in and convert number:
   while( ((ch = getchar()) != EOF) && isdigit( ch ) )
      result = result * 10 + ch - '0';    // Use digit.
   if( ch != EOF )
      ungetc( ch, stdin );                // Put nondigit back.
   printf( "Number = %d\nNext character in stream = '%c'",
            result, getchar() );
}

      521aNumber = 521
Next character in stream = 'a'

참고 항목

스트림 I/O
getc, getwc
putc, putwc