ungetc
, ungetwc
스트림에 문자를 다시 푸시합니다.
구문
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
매개 변수
c
푸시할 문자 수입니다.
stream
FILE
구조체에 대한 포인터입니다.
반환 값
성공하면 이러한 각 함수는 문자 인수 c
를 반환합니다. 다시 푸시할 수 없거나 읽은 문자가 없으면 c
입력 스트림이 변경되지 않고 반환 EOF
ungetwc
WEOF
됩니다.ungetc
이 경우 stream
매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출NULL
됩니다. 실행을 계속 EOF
하도록 허용되거나 WEOF
반환 errno
EINVAL
되고 .
이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 , _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
이 실패할 수 있습니다.
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 플랫폼) 앱에서 지원되지 않습니다. C 런타임 함수가 UWP 앱에서 사용할 수 있기 전에 콘솔stdin
stdout
, 및 , 및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'
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기