- •Институт математики, экономики и механики кафедра математического обеспечения компьютерных систем в. С. Макогон, и. Н. Лисицына
- •Оглавление
- •Введение
- •Основныетипы данных, операции и выражения
- •Описание переменных.
- •Операции , выражения и операторы.
- •3. Операторы управления программой. Базовые управляющие структуры.
- •Операторы ветвления Условный оператор if
- •Оператор - переключатель
- •Операторы повторения (цикла).
- •4. Программирование алгоритмов линейной структуры.
- •5. Программирование разветвляющихся алгоритмов (оператор if).
- •6. Программирование разветвляющихся алгоритмов (оператор switch)
- •Оператор for
- •Цикл с постусловием do -while
- •8. Итерационные циклы
- •Задачи для самостоятельного решения
- •9. Программирование алгоритмов с использованием функций
- •Основные понятия численного решения уравнений
- •10. Программирование алгоритмов с использованием массивов
- •11. Символьные переменные и строки. Обработка строк.
- •Другие средства ввода-вывода символов и строк
- •Массивы строк
- •12. Указатели
- •Массивы указателей
- •2. Описание метода трапеций
- •3. Программный комплекс
- •13. Структуры
- •Указатели на структуры
- •14. Файлы. Потоковый ввод-вывод
- •Функции для работы с файлами
- •Открытие файловых потоков
- •Закрытие файловых потоков
- •Удаление файлов
- •Переименование файлов
- •Реинициализация
- •Функции для ввода-вывода по символам
- •1 Вариант) содержит только буквы исходной строки
- •2 Вариант) перевернута по отношению к исходной
- •Двоичные (бинарные) файлы. Блочно-ориентированный ввод-вывод.
Открытие файловых потоков
Прежде чем начать работать с потоком, его следует открыть. Когда поток открывается для ввода-вывода, он связывается со структурой FILE, которая была рассмотрена выше. Для открытия применяется функция fopen().
Прототип:
FILE * fopen(char *_path, char *_mode);
Описание:
Параметр _path содержит указатель на массив символов, в котором содержится путь к файлу и его имя.
Параметр _mode определяет так называемый режим доступа к файлу; должен быть строковый и начинаться с одной из следующих последовательностей:
Режим |
описание |
начинает с.. | ||
r |
rb rt |
|
открывает для чтения существующий файл |
начала |
w |
wb wt |
|
открывает для записи (создает файл в случае его отсутствия). Удаляет содержимое и перезаписывает файл. |
начала |
a |
ab at |
|
открывает для добавления (создает файл в случае его отсутствия) |
конца |
r+ |
rb+ rt+ |
r+b r+t |
открывает существующий файл для чтения и записи в любом месте файла; невозможна дозапись в конец файла |
начала |
w+ |
wb+ wt+ |
w+b w+t |
открывает для чтения и записи в любом месте файла; удаляет содержимое и перезаписывает файл; возможна дозапись в конец файла |
начала |
a+ |
ab+ at+ |
a+b a+t |
открывает для чтения и записи (добавляет в случае существования файла) |
конца |
Стандарт языка С различает два вида файлов — текстовые и двоичные . Значение «t» зарезервировано для текстового режима (принято по умолчанию); значение «b» зарезервировано для двоичного режима.
Текстовый файл — файл, содержащий текст, разбитый на строки при помощи некоторого разделяющего символа окончания строки или последовательности (в Unix — одиночный символ перевода строки; в Microsoft Windows за символом перевода строки следует знак возврата каретки). При считывании байтов из текстового файла, символы конца строки обычно заменяются одним символом - переводом строки для упрощения обработки. При записи текстового файла одиночный символ перевода строки перед записью заменяется со специфичной для ОС последовательностью символов конца строки. Кроме того, как только из файла произойдет считывание символа с кодом 26(0x1Ah), считается, что достигнут конец файла (ситуация EOF).
Двоичный (бинарный) файл — файл, из которого байты считываются и выводятся в «сыром» виде, без какого-либо преобразования (подстановки). Все они рассматриваются как не имеющие какого-либо специального предназначения.
При открытом файле в режиме обновления ('+' в качестве второго или третьего символа аргумента обозначения режима) и ввод и вывод могут выполняться в одном потоке. Тем не менее, запись не может следовать за чтением без промежуточного вызова fflush() или функции позиционирования в файле (fseek(), fsetpos() или rewind()), а чтение не может следовать за записью без промежуточного вызова функции позиционирования в файле.
Режимы записи и добавления пытаются создать файл с заданным именем, если такого файла еще не существует.
Возвращаемое значение:
Как указывалось выше, если эта операция оканчивается неудачей, fopen() возвращает NULL, в противном случае возвращается указатель на структуруFILE.
Указатель на поток fp должен быть объявлен в программе следующим образом:
FILE *fp;
Открытие потока можно осуществить так:
fp=fopen(имя_файла, режим);
Рекомендуется всегда проверять, успешно ли открыт поток, например:
if(fp==NULL)
{ puts(“ошибка”); exit(1); } //или perror(“имя_файла”);