Функция ungetc() — стандартная функция языка Си для работы с символом.
Объявление прототипа функции ungetc():
int ungetc(int c, FILE *stream)
Это объявление находится в файле заголовков stdio.h, поэтому программы, использующие эту функцию, должны включать следующую директиву препроцессора:
#include <stdio.h>
Функция ungetc() возвращает один символ во входной поток при условии, что выполнялось хотя бы одно чтение. Следующая операция чтения прочитает этот символ.
Часто эта функция реализуется как макрокоманда, определенная в файле заголовков stdio.h. Функция ungetc() используется для вставки последнего прочитанного символа обратно во входной поток так, что следующая операция чтения прочтет его снова. Это может потребоваться в случае, когда один символ читается много раз, или когда значение прочитанного символа не принадлежит требуемому диапазону (например, ожидается число, а было прочитано 'z').
Вставка символа гарантируется лишь тогда, когда из входного потока было прочитано хотя бы что-нибудь, и когда поток буферизован (открыт функцией fopen()). Если функция ungetc() не может вставить символ, она возвращает EOF.
Пример 1
Функция выбрасывает из входного потока символы промежутков.
#include <stdio.h>
void skip_whites(FILE *fp)
{
int c;
while ((c=fgetc(fp)) == ' ' || c=='\t' || c== '\n')
   ;
ungetc(c,fp); /*возвращает во входной поток отличный от промежутков символ*/
}