Функция ungetc

Прототип функции ungetc:

int ungetc( int character, FILE * filestream );

Заголовочный файл

Название Язык
stdio.h С
cstdio С++

Описание

Функция ungetc возвращает только что прочитанный символ обратно в поток ввода filestream, через параметр character. Внутренний индикатор позиции файла уменьшается обратно, на предыдущее положение, так что этот символ возвращается при следующем вызове операции чтения для этого потока.

Параметр character  может содержать любой символ, например, последний символ прочитанный из потока в предыдущей операции или любой другой. В обоих случаях, значение, полученное по следующей операции чтения является значением функции ungetc, независимо от символа character.

Обратите внимание, что данная функция влияет только на следующую операцию чтения для данного потока, а не на содержание файла, связанного с потоком, который не изменяется при любом вызове этой функции.

Если внутренний показатель конца файла EOF был установлен, то после вызова этой функции он очищается.

Вызовы функций  fseek, fsetpos или rewind для потока stream совместно с функцией ungetc, будут отбрасывать любые символы назад.

Если аргумент параметра characterEOF, функция завершается, не изменяя входной поток.

Параметры:

  • 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 для чтения и выводит его строки, но сначала получает первый символ каждой строки и кладет его обратно в поток, за исключением случаев, когда строка начинается с символа %, и в этом случае такой символ не будет заменен на ~.

Автор: Marienko L.
Дата: 15.09.2012
Поделиться:

Комментарии

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.