Добавил:
Помощь с лабораторными, контрольными практическими и курсовыми работами по: - Инженерной и компьютерной графике - Прикладной механике Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем 1 курс С++ / Экзамен / Lektsii_Kurakina_2_semestr.pdf
Скачиваний:
12
Добавлен:
08.08.2022
Размер:
4.82 Mб
Скачать

Err error;

switch (error){

case ERR_READ: /* операторы */ break;

case ERR_WRITE: /* операторы */ break;

case ERR_CONVERT: /* операторы */ break;

}

Константам ERR_READ, ERR_WRITE, ERR_CONVERT присваиваются значения 0, 1 и 2 соответственно.

Другой пример:

enum {two = 2, three, four, ten = 10, eleven, fifty = ten + 40};

Константам three и four присваиваются значения 3 и 4, константе eleven — 11.

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

Переименование типов

А.11 Переименование типов

Переименование типов позволяет задавать новые названия с существующим типом данных. Используются для того чтобы сделать программу более ясной. Формат записи:

typedef тип новое_имя [ размерность ];

В данном случае квадратные скобки являются элементом синтаксиса. Размерность может отсутствовать. Примеры:

typedef unsigned int UINT;

typedef char Msg[100];

typedef struct{

char f1o[30];

int date, code;

double salary;} Worker;

Введенное таким образом имя можно использовать таким же образом, как и имена стандартных типов:

UINT i, j ; // две переменных типа unsigned int

Msg str[10]; // массив из 10 строк по 100 символов

Worker staff[100]; // массив из 100 структур

Кроме задания типам с длинными описаниями более коротких

псевдопимов, typedef используется для облегчения переносимости программ.

Например, в старых компиляторах для обозначения переменных с плавающей точкой использовался оператор real. Чтобы не переписывать программы под новые компиляторы, можно переименовать real во float.

Пример:

typedef float real;

Открытие файла

12. Библиотека ввода/вывода. Работа с файлами

12.1 Файл и поток

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

·ANSI – буферизованный ввод/вывод,

·UNIX – неформатированный ввод/вывод,

·Cи++ – объектно-ориентированный ввод/вывод.

Система ввода-вывода не зависит от типа устройств ввода/вывода. Есть абстрактный уровень между программистом и физическим устройством, называемый потоком. Файл – это средство хранения информации на физическом устройстве.

С связывает физическое устройство с логическим устройством (потоком) посредством функций. Одна функция служит для работы с несколькими физическими устройствами.

Различают два вида потоков.

1)текстовый поток – это последовательность символов, в которой нет однозначного соответствия между символами в потоке и на экране;

2)двоичный поток – это последовательность байтов, где имеет место однозначное соответствие тому, что находится на внешнем устройстве и в памяти.

12.2 Открытие файла

Поток связывается с файлом при помощи операции открытия файла.

Файлы на диске, на принтере, на мониторе, имеют различную структуру. Все потоки одинаковы. Операция открытия файла связывает поток с определённым файлом. Операция закрытия разрывает эту связь. Если поток открыт для вывода, при выполнении операции закрытия, соответствующий буфер записывается на внешнее устройство. При нормальном окончании программы все файлы автоматически закрываются, буферы освобождаются.

Каждый поток, связанный с файлом, имеет управляющую структуру типа FILE, определённую в stdio.h. В stdio.h определены основные характеристики файла (имя, дата создания, статус и т. д.). Для связывания файла с потоком необходимо создать указатель на структуру типа FILE. FILE * fptr;

Открытие файла осуществляется при помощи функции fopen.

Функция открывает поток, связывает файл на диске с потоком и возвращает указатель, ассоциированный с файлом.

FILE * fopen (char * filename, char * mode);

имя файла:

мода

Второй параметр mode задаёт требуемый тип доступа к файлу.

Mode

"r"

"w"

"a"

"r+"

"w+"

"a+"

Действие Открытие для чтения. Если файл не существует или не может быть найден, функция fopen возвращает признак ошибки.

Открытие для записи. Если файл существует, его содержимое уничтожается. Если файл не существует, он создаётся.

Открытие для добавления. Если файл не существует, он создаётся. Открытие для чтения и записи. Файл должен существовать.

Открытие пустого файла для чтения и записи. Если файл существует, его содержимое уничтожается.

Открытие для чтения и добавления. Если файл не существует, он создаётся.

Кроме того, к параметру mode могут быть добавлены символы t и b для задания текстового и двоичного режимов соответственно. По умолчанию используется текстовый режим.

Моды могут сочетаться, например wr – чтение/запись.

В случае ошибки функция fopen возвращает значение NULL.

12.3 Функция exit()

Пример:

#include <stdio.h>

main()

{

FILE * fp;

if ((fp=fopen(“test.txt”, “w”)) = =NULL)

{ puts (“ Не могу открыть файл \n”);

exit (1);

}

else { . . .}

}

Поиск файла осуществляется в текущем каталоге. Для гарантированного нахождения нужного файла необходимо указывать полный путь, например “H:\\BC\\test.txt”.

Функция exit определена в библиотеке stdlib.h. Функция прекращает выполнение программы и возвращает управление ОС, передавая соответствующую константу, которая может служить для диагностики окончания программы. Перед окончанием

Соседние файлы в папке Экзамен