ungetc
, ungetwc
스트림에 문자를 다시 푸시합니다.
구문
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
매개 변수
c
푸시할 문자 수입니다.
stream
FILE
구조체에 대한 포인터입니다.
반환 값
이러한 각 함수는 정상적으로 실행되면 문자 인수 c
을(를) 반환합니다. c
을(를) 다시 푸시할 수 없거나 읽은 문자가 없는 경우에는 입력 스트림이 변경되지 않으며 ungetc
은(는) EOF
을(를) 반환하고 ungetwc
은(는) WEOF
을(를) 반환합니다. 검사점 생성 시 stream
가 NULL
인 경우 Parameter Validation를 참조하세요. 실행을 계속 EOF
하도록 허용되거나 WEOF
반환 errno
EINVAL
되고 .
이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 errno
, _doserrno
, _sys_errlist
및 _sys_nerr
을(를) 참조하세요.
설명
ungetc
함수는 c
문자를 stream
에 다시 푸시하고 파일 끝 표시기를 지웁니다. 이때 스트림이 읽기를 위해 열려 있어야 합니다. 에 대한 stream
후속 읽기 작업이 시작됩니다 c
. ungetc
를 사용하여 스트림에 EOF
를 푸시하려는 시도는 무시됩니다.
ungetc
에 의해 스트림에 배치되는 문자는 스트림에서 해당 문자를 읽기 전에 fflush
, fseek
, fsetpos
또는 rewind
를 호출하는 경우 지워질 수 있습니다. 파일 위치 표시기에는 문자가 다시 푸시되기 전의 값이 지정됩니다. 스트림에 해당하는 외부 스토리지는 변경되지 않습니다. 텍스트 스트림에 대해 ungetc
가 정상적으로 호출되어도 다시 푸시된 모든 문자를 읽거나 삭제할 때까지 파일 위치 표시기는 지정되지 않습니다. 이진 스트림에 대해 각 ungetc
를 정상적으로 호출하면 파일 위치 표시기가 감소합니다. 호출 전에 표시기의 값이 0이었다면 호출 후에는 값이 정의되지 않습니다.
두 호출 사이에 읽기 또는 파일 배치 작업이 수행되지 않은 상태로 ungetc
를 두 번 호출하는 경우의 결과는 예측할 수 없습니다. 호출 fscanf
후에는 호출 자체가 호출되기 ungetc
때문에 fscanf
다른 읽기 작업(예: getc
)이 수행되지 않는 한 호출ungetc
이 실패할 수 있습니다.
ungetwc
은 ungetc
의 와이드 문자 버전입니다. 그러나 텍스트 또는 이진 스트림에 대해 각 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 플랫폼) 앱에서는 콘솔이 지원되지 않습니다. 콘솔에 연결된 표준 스트림 핸들, stdin
, stdout
및 stderr
은 UWP 앱의 C 런타임 함수에서 사용되기 전에 리디렉션되어야 합니다. 호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// 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'