Поделиться через


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, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, возвращается EOF или WEOF, и errno принимает значение EINVAL.

Дополнительные сведения об этих и других кодах ошибок см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.

Заметки

Функция ungetc помещает символ c обратно в stream и удаляет индикатор конца файла. Поток должен быть открыт для чтения. Последующая операция чтения из stream начинается с c*.* Попытка отправить EOF в поток с помощью ungetc игнорируется.

Символы, помещенные в поток функцией ungetc, могут быть стерты, если fflush, fseek, fsetpos или rewind вызывается до того, как символ прочитан из потока. Индикатор позиции файла будет иметь значение, которое он имел до того, как символы были отправлены обратно. Внешнее хранилище, соответствующее потоку, остается неизменным. При успешном вызове ungetc для текстового потока, индикатор позиции файла остается не заданным, пока отправленные в конец символы не прочитаны или не отброшены. При каждом успешном вызове ungetc для двоичного потока, индикатор позиции файла уменьшается; если его значение равно 0, то это значение не определено после вызова.

Результаты непредсказуемы, если ungetc вызывается дважды без операции чтения или позиционирования файла между двумя вызовами. После вызова fscanf, вызов ungetc может завершиться неудачей, если не будет выполнена другая операция чтения (например, getc). Это происходит потому, что fscanf сам вызывает ungetc.

ungetwc — это версия ungetc для расширенных символов. Однако при каждом успешном вызове ungetwc для текстового или двоичного потока, значение индикатора позиции файла не указано до тех пор, пока все отправленные в конец символы не считаны или отброшены.

Эти функции потокобезопасны и блокируют чувствительные данные во время выполнения. Для неблокирующей версии см. _ungetc_nolock, _ungetwc_nolock.

Универсальное текстовое сопоставление функций

Подпрограмма TCHAR.H

_UNICODE & _MBCS не определены

_MBCS определено

_UNICODE определено

_ungettc

ungetc

ungetc

ungetwc

Требования

Подпрограмма

Обязательный заголовок

ungetc

<stdio.h>

ungetwc

<stdio.h> или <wchar.h>

Консоль не поддерживается в приложениях Магазин Windows. Стандартные дескрипторы потока, связанные с консолью — stdin, stdout и stderr — необходимо перенаправить, чтобы функции C времени выполнения могли использовать их в приложениях Магазин Windows. Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// 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() );
}
  

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Потоковый ввод-вывод

getc, getwc

putc, putwc