ungetc () в C / C ++
Опубликовано: 30 Декабря, 2021
Функция ungetc () берет один символ и отправляет его обратно во входной поток. Это противоположность функции getc (), которая считывает один символ из входного потока. Кроме того, ungetc () - это функция ввода, а не функция вывода.
Синтаксис:
int ungetc (int char, FILE * поток)
Параметры:
- char : указывает продвижение символа int, который нужно вернуть. При возврате значение внутренне преобразуется в беззнаковый символ.
- stream : указывает указатель на объект FILE, который идентифицирует входной поток.
Возвращаемое значение: функция возвращает два типа значений.
- В случае успеха функция ungetc () возвращает символ ch.
- В случае сбоя EOF возвращается без изменения потока.
Важные моменты о функции:
- Функция ungetc () проталкивает байт, указанный параметром char (преобразованный в символ без знака), обратно во входной поток, на который указывает stream.
- Возвращенные байты возвращаются последующими чтениями в этом потоке в порядке, обратном их отправке.
- Успешный промежуточный вызов (с потоком, на который указывает stream) функции позиционирования файла (fseek (), fsetpos () или rewind ()) отбрасывает любые возвращенные байты для потока.
- Внешнее хранилище, соответствующее потоку, должно оставаться неизменным.
- Успешный вызов ungetc () очищает индикатор конца файла для потока.
- Значение индикатора позиции файла для потока после чтения или отбрасывания всех возвращенных байтов должно быть таким же, каким оно было до того, как байты были отправлены обратно.
- Индикатор позиции в файле уменьшается при каждом успешном вызове ungetc (), если его значение было 0 до вызова, его значение не указывается после вызова.
Программы ниже иллюстрируют вышеуказанную функцию.
Программа 1:
#include <stdio.h> int main() { FILE * f; int char ; char buffer[256]; // read a file f = fopen ( "use1.txt" , "r" ); // when no data if (f == NULL) { printf ( "Error in opening file" ); return (-1); } // read lines till end while (! feof (f)) { // get line char = getc (f); // replace ! with + if ( char == '!' ) { ungetc ( '+' , f); } // if not else { ungetc (c, f); } fgets (buffer, 255, f); fputs (buffer, stdout); } return 0; } |
Предположим, у нас есть текстовый файл use1.txt, который содержит следующие данные. Этот файл будет использоваться в качестве входных данных для нашей примерной программы, а затем входные и выходные данные показаны ниже:
Вход:! C стандартная библиотека ! библиотечная функция stdio.h-ungetc () Вывод: + c стандартная библиотека + библиотечная функция stdio.h-ungetc ()
Программа 2:
// C program for taking input till we // get 1 at the input #include <stdio.h> int main() { int ch; // reads characters from the stdin and show // them on stdout until encounters '1' while ((ch = getchar ()) != '1' ) putchar (ch); // ungetc() returns '1' previously // read back to stdin ungetc (ch, stdin); // getchar() attempts to read // next character from stdin // and reads character '1' returned // back to the stdin by ungetc() ch = getchar (); // putchar() displays character putchar (ch); return 0; } |
Хотите учиться на лучших видео и практических задачах, ознакомьтесь с Базовым курсом C для базового и продвинутого C.