Прототип функции ungetc:
int ungetc( int character, FILE * filestream );
Заголовочный файл
Название | Язык |
---|---|
stdio.h | С |
cstdio | С++ |
Описание
Функция ungetc
возвращает только что прочитанный символ обратно в поток ввода filestream
, через параметр character
. Внутренний индикатор позиции файла уменьшается обратно, на предыдущее положение, так что этот символ возвращается при следующем вызове операции чтения для этого потока.
Параметр character
может содержать любой символ, например, последний символ прочитанный из потока в предыдущей операции или любой другой. В обоих случаях, значение, полученное по следующей операции чтения является значением функции ungetc
, независимо от символа character
.
Обратите внимание, что данная функция влияет только на следующую операцию чтения для данного потока, а не на содержание файла, связанного с потоком, который не изменяется при любом вызове этой функции.
Если внутренний показатель конца файла EOF
был установлен, то после вызова этой функции он очищается.
Вызовы функций fseek
, fsetpos
или rewind
для потока stream
совместно с функцией ungetc
, будут отбрасывать любые символы назад.
Если аргумент параметра character
— EOF
, функция завершается, не изменяя входной поток.
Параметры:
- character
Символ, возвращаемый обратно в поток. Символ передается, как значение типаint
. - filestream
Указатель на объект типаFILE
, который идентифицирует входной поток.
Возвращаемое значение
В случае успеха, возвращается целочисленное значение символа, который был перенесен обратно в поток.
В противном случае, возвращается значение EOF
, и поток остается неизменным.
Пример: исходный код программы
//пример использования функции ungetc #include <cstdio> #include <iostream> int main() { FILE * ptrFile = fopen("file.txt", "rt"); char buffer [256]; if (ptrFile == NULL) perror("Ошибка открытия файла"); else { while ( !feof(ptrFile) ) // пока не конец файла { int c = getc(ptrFile); // считать символ из файла if (c == '%') // если считанный символ - % ungetc('~', ptrFile); // вернуть символ '~' в поток ввода else ungetc(c, ptrFile); // вернуть считанный символ в поток ввода fgets(buffer, 255, ptrFile); // считать символы из файла и сохранить в buffer fputs(buffer, stdout); // вывод на экран содержимого буфера } fclose(ptrFile); } return 0; }
Пример работы программы
Эта программа открывает существующий файл с именем file.txt
для чтения и выводит его строки, но сначала получает первый символ каждой строки и кладет его обратно в поток, за исключением случаев, когда строка начинается с символа %
, и в этом случае такой символ не будет заменен на ~
.
Комментарии