- •Списки §1. Общие сведения о списках
- •§2. Создание списка
- •§3. Просмотр и анализ списка
- •3.1. Просмотр и анализ списка целых чисел.
- •3.2. Просмотр и анализ списка одномерных массивов.
- •§6. Сравнительный анализ списков.
- •§1. Порядок работы с файлом
- •1.1. Потоки и файлы
- •1.2. Объявление файла
- •1.3. Открытие файла.
- •1.4. Закрытие файла.
- •§2. Работа с текстовым файлом
- •2.1. Посимвольная работа с текстовым файлом
- •Int fputc(int ch, file *stream)
- •2.2. Построчная работа с текстовым файлом
- •§3. Функции блокового ввода/вывода
- •3.1. Экономические задачи с использованием файлов
- •3.2. Математические задачи с использованием файлов
- •§4. Прямой (произвольный) доступ к файлу
- •4.1. Функция fseek()
- •4.2. Замена записи. Функции ftell, fgetpos, fsetpos, rewind.
- •Пример. В файл записать координаты точек плоскости. Найти две (любые) точки с наибольшим расстоянием между ними. Массив для хранения координат всех точек не использовать.
- •Упражнения, тесты.
- •Функции (дополнительные возможности)
- •§1. Функции с переменным количеством параметров.
- •§2. Указатели на функции.
- •§3. Массив указателей на функции.
- •§4. Введение в рекурсивные функции.
- •Упражнения, тесты.
- •Void Fun1 (float); void Fun2(float); void Fun3(float);
- •Лабораторная работа № 12.
- •Команды препроцессора (директивы компиляции)
- •§1. Директива define (замены в тексте)
- •Простое макроопределение (макрос)
- •Макрос с аргументами.
- •Директива #undef.
- •§2. Директива #include (включение файлов).
- •§3. Директивы условной компиляции.
- •Директива #if.
- •Директивы #ifdef и #ifndef.
- •Упражнения, тесты
- •История развития технологий программирования
- •§1. Программирование в машинных кодах и на языках символического кодирования
- •§2. Языки высокого уровня. Структурное и модульное программирование
- •§3. Интегрированные системы программирования.
- •§4. История и идеи объектно-ориентированного программирования.
- •§5. Программирование для Windows. Визуальное программирование.
- •Литература
- •Оглавление Предисловие………………………………………………………….…………………3
- •Г л а в а 4. Структуры и другие типы, определяемые пользователем.84
- •Г л а в а 6. Файлы ………………………………………………………..154
- •Г л а в а 7. Функции (дополнительные возможности) ………………190
- •Г л а в а 9. История развития технологий программирования ……220
1.3. Открытие файла.
Поток связывается с конкретным файлом с помощью операции открытия файла. Если файл открыт, то можно осуществлять обмен информацией между файлом и программой. Открытие файла осуществляется с помощью функции
FILE * fopen (const char *filename, const char * mode) ;
Здесь filename — указатель на строку, в которой должно быть физическое имя файла, содержащее имя диска, последовательность папок и имя файла с расширением. Второй параметр mode определяет тип (права) доступа к файлу а, значит, и тип операций, разрешённых над ним. Параметр может принимать следующие основные значения:
w — создаёт файл (первая буква слова write). Файл с записанным в filename именем не должен существовать в указанной папке. В противном случае он будет уничтожен. Указанные в filename папки должны, конечно, существовать;
r — открывает файл для чтения (первая буква слова read). Наоборот, файл должен существовать в указанной папке;
a —добавляет данные только в конец файла. Если файл не существует, то он будет создан, то есть этот режим в таком случае аналогичен режиму w. Но в отличие от режима w, если файл существует, то уничтожаться не будет.
Кроме этих трёх, можно использовать следующие вспомогательные режимы:
w+ — создаёт файл как для чтения, так и для создания, то есть для записи. В отличие от режима w файл не удаляется, если существует;
r+ — открывает файл как для чтения, так и для записи. Если файл не существует, то ошибки не будет, он будет создан;
a+ — аналогичен режиму a, только добавление можно выполнять в любое место файла, не обязательно в конец.
После этих символов можно дописать букву ‘b’, если мы будем работать с файлом в двоичном режиме, или ‘t’, если в текстовом. Например, значением параметра mode может быть строка “wb”, что означает, что файл будет создан как двоичный. Если ни одна из этих букв не указана, то по умолчанию подразумевается текстовый режим.
Обе строки в функции fopen можно задавать как с помощью переменных, так и в виде константы. В имени файла символ ‘\’ должен быть продублирован, так как он используется для записи управляющего символа (‘\n’,’\t’ и другие).
Функция fopen выполняет следующие действия: открывает поток; связывает файл с этим потоком и возвращает указатель на структуру типа FILE. Если файл не может быть открыт, функция возвращает NULL. Причиной этого может быть отсутсвие указанной в fname папки, недостаточный объём памяти на диске при попытке записи на него, отсутствие файла при попытке чтения и другие.
Например,
FILE * fp;
fp=fopen("d:\\ANA\\cpp\\2005_06\\File1\\ bf1.dat","rb");
if (fp==NULL) { cout<<”Error “; exit(1); }
Оператор присваивания и оператор if можно объединить вместе следующим образом:
if((fp=fopen("d:\\ANA\\cpp\\2005_06\\File1\\ bf1.dat","rb"))==NULL)
{ cout<<”Error “; exit(1); }
При этом, так как операция присваивания имеет меньший приоритет, чем операция сравнения, то нужны внутренние скобки в операторе if. Этот фрагмент программы открывает существующий файл bf1.dat для чтения в двоичном режиме.