Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Помещает символ обратно в поток.
Синтаксис
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
Параметры
c
Символ, который требуется поместить обратно.
stream
Указатель на структуру FILE .
Возвращаемое значение
При успешном выполнении каждая из этих функций возвращает аргумент cсимвола. Если c не удается отправить назад или если символ не был прочитан, входной поток не изменяется и ungetc возвращается; ungetwc возвращаетсяEOFWEOF. В противном stream NULLслучае вызывается недопустимый обработчик параметров, как описано в разделе "Проверка параметров". Если выполнение разрешено продолжать или EOF WEOF возвращается, и errno задано значение EINVAL.
Дополнительные сведения об этих и других кодах ошибок см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.
Замечания
Функция ungetc помещает символ c обратно в stream и удаляет индикатор конца файла. Поток должен быть открыт для чтения. Следующая операция stream чтения начинается с c. Попытка отправить EOF в поток с помощью ungetc игнорируется.
Символы, помещенные в поток с помощью ungetc, могут быть удалены, если fflush, fseek, fsetpos или rewind вызывается перед считыванием символа из потока. Индикатор позиции в файле будет иметь значение, которое было до помещения символов обратно. Внешнее хранилище, соответствующее потоку, не изменяется. При успешном вызове ungetc для текстового потока индикатор позиции в файле будет не задан до тех пор, пока все помещенные обратно символы не будут считаны или удалены. При каждом успешном вызове ungetc для двоичного потока индикатор позиции файла уменьшается; если перед вызовом он имел значение 0, то после вызова его значение будет неопределенным.
Если ungetc вызывается дважды без выполнения между вызовами операции чтения или размещения в файле, результаты будут непредсказуемыми. После вызова вызов может ungetc завершиться ошибкой, если не выполнена другая операция чтения (напримерgetc), так как fscanf сама вызываетсяungetc.fscanf
ungetwc — это версия функции ungetc для расширенных символов. Однако при каждом успешном вызове ungetwc для текстового или двоичного потока значение индикатора позиции в файле будет не задано до тех пор, пока все помещенные обратно символы не будут считаны или удалены.
Эти функции являются потокобезопасными и блокируют конфиденциальные данные во время выполнения. Сведения о версии, отличной от блокировки, см. в статье _ungetc_nolock. _ungetwc_nolock
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
| Подпрограмма TCHAR.H | _UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
|---|---|---|---|
_ungettc |
ungetc |
ungetc |
ungetwc |
Требования
| Маршрут | Обязательный заголовок |
|---|---|
ungetc |
<stdio.h> |
ungetwc |
<stdio.h> или <wchar.h> |
Консоль не поддерживается в приложениях универсальная платформа Windows (UWP). Стандартные дескрипторы потока, связанные с консолью, stdinstdoutи stderr, должны быть перенаправлены перед тем, как функции времени выполнения C могут использовать их в приложениях UWP. Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// 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'