Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1-16.doc
Скачиваний:
11
Добавлен:
12.05.2015
Размер:
141.82 Кб
Скачать

3.3. Ввод/вывод форматированных данных в файлы и строки

Помимо рассмотренных ранее функций в разделе stdio.hстандартной библиотеке C реализованы также следующие функции ввода и вывода форматированных данных:

  • fprintf()– форматированная запись данных в файл;

  • sprintf()– форматированная запись данных в строку;

  • fscanf()– форматированное чтение данных из файла;

  • sscanf()– форматированное чтение данных из строки;

Функции форматированного ввода и вывода fprintf(),sprintf(),fscanf()иsscanf()определяются следующим образом:

int fprintf(FILE * идентификатор-файла,

char *строка-формата[, аргумент-1,...])

int sprintf(char * строка, char *строка-формата[,аргумент-1,...])

int fscanf (FILE * идентификатор-файла,

char * строка-формата[, аргумент-1,...])

int sscanf(char * строка, char * строка-формата[,аргумент-1,...])

где

*идентификатор-файла– указатель на файл (переменную типаFILE), в который записываются или из которого считываются данные.

* строка– строка, в которую записываются или из которой считываются данные.

строка-формата– строка формата (дляfprintf()иsprintf()определяется аналогичноprintf(), а дляfscanf()иsscanf()– аналогичноscanf()).

аргумент-1,...– выводимые выражения (дляfprintf()иsprintf()) или адреса вводимых переменных (дляfscanf()иsscanf()).

Возвращаемое значение: для fprintf()иsprintf()– количество выведенных символов, а дляfscanf()иsscanf()– количество успешно введенных, преобразованных и присвоенных элементов ввода илиEOF– по достижении конца файла или конца строки.

Функции sscanf()иsprintf()выполняют те же действия, что и функцииfscanf()иfprintf(), но вводимые данные берутся из строки, а выводимые данные помещаются в строку.

3.4. Функция закрытия файлов

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

Функция fclose() закрывает указанный файл. Все буфера, связанные с потоками (как системные, так и пользовательские) при закрытии файла автоматически освобождаются. Функция имеет следующее определение:

int fclose (FILE * идентификатор-файла)

где

идентификатор-файла– указатель на закрываемый файл (переменную типаFILE).

Возвращаемое значение: функция fclose()возвращает значение0, если файл успешно закрыт или значениеEOF, если произошла ошибка.

3.5. Файловый ввод/вывод символов и строк

Помимо рассмотренных ранее функций вывода символов и строк в стандартный поток stdout,в разделе stdio.hстандартной библиотеки C реализованы также следующие функции вывода символов и строк в файлы:

  • fputc()– запись символа в файл;

  • putc()– запись символа в файл (версия макро);

  • fputs() – запись строки в файл;

  • ungetc()– возврат символа в файл.

Для ввода символов и строк из файла можно использовать следующие функции:

  • fgetc()– чтение символа из файла;

  • getc()– чтение символа из файла (версия макро);

  • fgets() – чтение строки из файла;

Функции fputc(),putc(),ungetc(),fgetc()иgetc()записывают символ в файл или читают символ из файла и определяются следующим образом:

int fputc (int символ, FILE * идентификатор-файла)

int putc (int символ, FILE * идентификатор-файла)

int ungetc (int символ, FILE * идентификатор-файла)

int fgetc (FILE * идентификатор-файла)

int getc (FILE * идентификатор-файла)

где

символ– символ, записываемый в выводной поток.

* идентификатор-файла– указатель на файл (переменную типаFILE), в который записывается или из которого считывается символ.

Возвращаемое значение– записанный или считанный символ илиEOF, если либо произошла ошибка, либо встретился конец файла, либо (дляungetc()) попытка записать символ оказалась неудачной.

Функции getc()иfgetc(), работают почти так же, как функцияgetchar(), а функцииputc()иfputc()– почти так же, как функцияputchar(). Разница состоит в том, что этим функциям необходимо указать, какой файл ис­пользовать.

Функция ungetc()помещает символ, задаваемый первым аргументом, назад во входной поток. Пос­ле этого при следующем вызове функции ввода этот символ будет прочитан. СтандартANSICгарантирует только одну вставку символа за один раз.

Функции fputs()иfgets()записывают строку в файл или читают строку из файла и определяются следующим образом:

int fputs (const char *строка, FILE * идентификатор-файла)

char *fgetc (char * строка, int максимальная-длина,

FILE * идентификатор-файла)

где

* строка– указатель на вводимую или выводимую строку.

максимальная-длина– максимальная длина вводимой строки.

* идентификатор-файла– указатель на файл (переменную типаFILE), в который записывается или из которого считывается строка.

Функция fgets()читает информацию ввода до первого символа перевода строки или пока прочитано меньше символов, чем задано вмаксимальной-длинеминус один символ или же пока не достигнут конец файла; затем фун­кцияfgets()добавляет конечный символ "\0", что­бы сформировать строку. Еслиfgets() читает целую строку до того, как достигнутамаксимальная-длина, она добавляет символ перевода строки в конце стро­ки, как раз перед нулевым символом. В этом она отли­чается отgets(), которая читает символ перевода строки, но опускает его.

Функция fgets()возвращает значениеNULLв случае, если она читает символ конца файла. Это можно использовать, чтобы проверить, достигнут ли конец файла. Иначе она возвращает переданный ей ад­рес.

Функция fputs()имеет два аргумента: сначала адрес строки, затем файловый указатель. Она записывает стро­ку, найденную по указателю, в файл. В отличие отputs(), функцияfputs()не добавляет символ новой строки при выводе. Так же, как и функцияputs(), функцияfputs()при успешном выводе возвращает неотрицательное число, а при ошибке возвращает значениеEOF.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]