Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры к экзамену по программированию в 1 семест....doc
Скачиваний:
26
Добавлен:
22.04.2019
Размер:
576 Кб
Скачать

63. Текстовые файлы. Создание и обработка. Функции ввода/вывода в стиле с. Ввод-вывод нуль-терминированных строк. Посимвольный ввод-вывод. Форматированный ввод-вывод.

Операции ввода-вывода  Ввод-вывод в файл можно осуществлять различными способами, в зависимости от поставленной задачи.Работа со строками int fputs(const char* str, FILE* stream);Пишет строку str в поток stream, не включая завершающий нулевой байт. В случае удачи возвращает 0 (или ASCII-код последнего вводимого символа), иначе возвращает EOF.

Для записи строки в стандартный выходной поток stdout применяется функция

int puts(char* str); При выводе завершающий нулевой байт строки преобразуется в символ новой строки. char* fgets(char* str, int size, FILE* stream);

Читает строку из потока stream в строку str, остановится:      прочитан size+1 символ;

     встретился символ новой строки;

     достигнут конец файла.Символ \n копируется в строку, к концу строки добавляется нулевой байт \0. Возвращает при успехе указатель на str, иначе возвращает NULL. Строка str не изменяется, если ни один символ не прочитан и встретился конец файла.

Для чтения из стандартного потока stdin применяется функция

char* gets(char* str);Нет способа ограничить число символов при вводе, поэтому массив, адресуемый указателем str, может переполниться.7

64. Бинарные файлы. Последовательный метод доступа в стиле С (функции fread, fwrite). Прямой метод доступа.Если файл открыт в бинарном режиме, его можно записывать или считывать побайтно. Функция fseek() позволяет обращаться с файлом как с массивом и переходить к любой позиции в файле, обеспечивая возможность произвольного доступа. Если текстовые файлы являются файлами с последовательным доступом, то произвольный доступ чаще всего применяется к бинарным файлам. Бинарные файлы могут содержать любую информацию. Чаще всего используются файлы, содержащие структуры. Для чтения и записи в бинарные файлы можно использовать функции fread(), fwrite() или fscanf(),fprintf().

fread –функция для чтения из файла:

int fread(void *ptr, unsigned size, unsigned count, FILE *f);

Из файла f считываются и по адресу ptr записываются count элементов размером size каждый. Функция возвращает число фактически считанных элементов.

fwrite – функция для записи в файл:

int fwrite(void *ptr, unsigned size, unsigned count, FILE *f);

В файл записываются, начиная с адреса ptr, count элементов размером size каждый. Функция возвращает число фактически записанных элементов.

fseek – функция для произвольного доступа к байтам бинарных файлов:

int fseek(FILE *f, long offset, int w);

offset показывает, на сколько байт нужно сместиться относительно точки отсчёта – w.

w должно быть равно одной из трех констант:

SEEK_SET или 0 - начало файла; SEEK_CUR или 1 – текущая позиция в файле;

SEEK_END или 2 – конец файла.ftell - возвращает текущю позицию в файле как длинное целое:long int ftell (FILE *f); Пример обработки бинарного файла

Составить программу, выполняющую следующие функции:Создание нового файла;

Просмотр файла;Добавление информации в конец файла;Поиск по названию товара и изменение цены и количества;Файл создать из структур вида: название товара, его цена и количество.Задание выполнить в отдельных функциях. Использовать меню для выбора функций.

65. Потоковый ввод-вывод (в стиле С++). Описание потоков. Организация форматированного ввода-вывода на основе потоков. Форматирующие методы. Манипуляторы потоков. Неформатированный потоковый ввод-вывод. Особенности работы с файловыми потоками.

Поток представляет собой последовательность примитивов ввода-вывода и реализован с помощью шаблонов, где в качестве параметра шаблона задается тип примитива charT. С помощью оператора typedef описаны потоки для типов char и wchar_t. В рамках настоящей темы будем рассматривать реализацию потоков для типа char и, следовательно, считать, что поток представляет собой последовательность символов.

Ввод-вывод данных с использованием потоков может быть форматированным или неформатированным. В первом случае используются перегруженные операторы >> и <<, которые позволяют помещать в поток и извлекать из потока данные любых типв, в том числе и пользовательских. Во втором случае (неформатированный ввод-вывод) никакого преобразования данных не происходит, и работа с потоками во многом напоминает уже описанную ранее работу с файлами.

  • ios – базовый класс для всех потоков;

  • istream, ostream, iostream – классы для стандартных потоков;

  • ifstream, ofstream, fstream – классы для файловых потоков;

  • istringstream, ostringstream, stringstream – классы для строковых потоков.

Форматированный ввод-вывод Для форматированного ввода-вывода используются перегруженные операторы >> и <<. Суть работы оператора << состоит в следующем: данные преобразуются в последовательность символов, которая и заносится в выходной файл.

Манипуляторы Работа с манипуляторами во многом похожа на использование форматирующих методов, но зачастую более проста и понятна. Манипуляторы делятся на простые и параметризированные (последние требуют задания в скобках уточняющих значений).

Неформатированный потоковый ввод-вывод В потоковых классах наряду с операциями извлечения из потока и помещения в поток определены методы для неформатированного чтения-записи. Для потока могут быть определены две текущих позиции: одна используется для чтения, другая – для записи в поток.