Содержание | Глава 13

Функция ungetc

#include <stdio.h>
int ungetc(int ch, FILE *stream);

Функция ungetc() возвращает в поток ввода stream символ, заданный младшим байтом параметра ch. Затем этот символ будет получен при последующей операции чтения потока stream. Обращение к таким функциям, как fflush(), fseek() и rewind(), аннулирует действие ungetc() и сбрасывает этот символ.

Гарантируется, что в поток можно возвратить один символ, однако некоторые реализации допускают возврат большего числа символов.

Попытка вернуть в поток ввода значение EOF игнорируется.

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

При успешном завершении функция возвращает значение ch, в противном случае — значение EOF.

Пример

Данная функция читает слова из входного потока, адресуемого указателем fp. Разделитель возвращается в поток для последующего использования. Например, если входные данные имеют вид count/10, то при первом обращении к функции read_word() она возвратит count, a символ "/" направит обратно во входной поток.

void read_word(FILE *fp, char *token)
{
  while(isalpha(*token=getc(fp))) token++;
  ungetc(*token, fp);
}

Зависимые функции

getc()
Содержание | Глава 13