Режимы открытия файлов
Режимы открытия файлов устанавливают характер использования файлов. Для установки режима в классе ios_base предусмотрены константы - флаги, которые определяют режим открытия файлов (см. Таблица 10). Таблица 10 Флаги открытия файлов
Режимы открытия файлов можно устанавливать непосредственно при создании объекта или при вызове функции open().
Режимы открытия файлов можно комбинировать с помощью поразрядной логической операции «или» |, например: ios_base::out | ios_base::trunc - открытие файла для записи, предварительно очистив его. Лабораторная работа № 8. Работа с файлами. Продолжительность – 4 часа. Максимальный рейтинг – 8 баллов. Цель работы Научиться работать с файловыми переменными посредствам подпрограмм библиотек fstream.h и stdio.h. Закрепить навыки работы со строками. Научиться открывать файлы для записи и чтения, создавать и уничтожать файлы, определять конец файла. Задание на лабораторную работу 1. Написать, отладить и протестировать программу, выполняющую операции с текстовыми файлами в соответствии со своим вариантом (Таблица 11). Продемонстрировать использование при этом файловых функций из библиотек «fstream.h» и «stdio.h». 2. Подобрать текст размером не менее 30 строк, в тексте обязательно должны содержаться те символы и подстроки, работа с которыми предусмотрена в индивидуальном задании.
3. Результат работы программы выводить на экран и обязательно сохранять в файл результатов. 4. Производимые над строками текстового файла операции оформить в виде подпрограмм. В теле подпрограмм допускается использование функций стандартных библиотек работы со строками «string.h» и т.п. 5. По выполненной лабораторной работе подготовить отчет с результатами работы программы. В отчет вставить листинг программного кода, исходный файл и файл результатов. Отчет без комментариев не принимается.
Таблица 11 Варианты индивидуальных заданий
Структуры языка С - Здравствуйте, Катю можно? Переименование типов (typedef) Для того чтобы сделать программу более ясной, можно задать типу новое имя с помощью ключевого слова typedef. Введенное таким образом имя можно использовать таким же образом, как и имена стандартных типов. Пример:
Перечисления (enum) При написании программ часто возникает потребность определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения. Для этого удобно воспользоваться перечисляемым типом данных - enum, все возможные значения которого задаются списком целочисленных констант.
Имя типа задается в том случае, если в программе требуется определять переменные этого типа. Компилятор обеспечивает, чтобы эти переменные принимали значения только из списка констант. Константы должны быть целочисленными и могут инициализироваться обычным образом. При отсутствии инициализатора первая константа обнуляется, а каждой следующей присваивается на единицу большее значение, чем предыдущей:
Пример:
Имена перечисляемых констант должны быть уникальными, а значения могут совпадать. Компилятор при инициализации констант выполняет проверку типов. Структуры (struct) В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него.
Если отсутствует имя типа, должен быть указан список описателей переменных, указателей или массивов. В этом случае описание структуры служит определением элементов этого списка:
Если список отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами, например:
Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания:
При инициализации массивов структур следует заключать в фигурные скобки каждый элемент массива
Для переменных одного и того же структурного типа определена операция присваивания, при этом происходит поэлементное копирование. Структуру можно передавать в функцию и возвращать в качестве значения функции. Доступ к полям структуры выполняется с помощью операций выбора «.» (точка) при обращении к полю через имя структуры и «->» при обращении через указатель, например:
Если элементом структуры является другая структура, то доступ к ее элементам выполняется через две операции выбора:
Как видно из примера, поля разных структур могут иметь одинаковые имена, поскольку у них разная область видимости. Битовые поля Битовые поля – это особый вид полей структуры. Они используются для плотной упаковки данных, например, логических флагов со значениями «false/true». Минимальная адресуемая ячейка памяти – 1 байт, а для хранения флага достаточно одного бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая положительная константа):
Битовые поля могут быть любого целого типа. Имя поля может отсутствовать, такие поля служат для выравнивания на аппаратную границу. Доступ к полю осуществляется обычным способом – по имени. Адрес поля получить нельзя, однако, в остальном битовые поля можно использовать точно так же, как обычные поля структуры. Следует учитывать, что операции с отдельными битами реализуются гораздо менее эффективно, чем с байтами и словами, так как компилятор должен генерировать специальные коды, и экономия памяти под переменные оборачивается увеличением объема кода программы. Объединения (union) Объединение (union) представляет собой частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, как у структуры, только вместо ключевого слова struct используется слово union. Длина объединения равна наибольшей из длин его полей. В каждый момент времени в переменной типа объединение хранится только одно значение, и ответственность за его правильное использование лежит на программисте. Объединения применяют для экономии памяти в тех случаях, когда известно, что больше одного поля одновременно не требуется:
Объединение часто используют в качестве поля структуры, при этом в структуру удобно включить дополнительное поле, определяющее, какой именно элемент объединения используется в каждый момент. Имя объединения можно не указывать, что позволяет обращаться к его полям непосредственно:
Объединения применяются также для разной интерпретации одного и того же битового представления (но, как правило, в этом случае лучше использовать явные операции преобразования типов). В качестве примера рассмотрим работу со структурой, содержащей битовые поля:
По сравнению со структурами и классами на объединения налагаются некоторые ограничения: • объединение может инициализироваться только значением его первого элемента; • объединение не может содержать битовые поля; • объединение не может содержать виртуальные методы, конструкторы, деструкторы и операцию присваивания; • объединение не может входить в иерархию классов.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|