- •Ф.Ф. Павлов языки программирования
- •Санкт-Петербург
- •230201 - Информационные системы и технологии
- •Тема 2 посвящена изучению жизненного цикла программы и основным этапам решения задач на эвм.
- •Тема 4 изучает типы пользовательских интерфейсов, классификацию диалогов и основные компоненты графических пользовательских интерфейсов.
- •Тема 8 посвящена структурам данных фиксированного размера (массивы), а также типам данных, определяемых пользователем (структуры, объединения, перечисления).
- •Тема 10 изучает динамические структуры данных: виды и способы реализации списков, динамическое выделение памяти.
- •Тема 12 затрагивает вопросы обработки файлов данных: понятия записи, файла данных и способы доступа, операции и средства обработки файлов, контроль операций обработки файлов.
- •Тема 14 вводит в технологию объектно-ориентированного программирования.
- •Раздел I Принципы программирования на языках высокого уровня
- •Тема 1. Эволюция языков программирования
- •1.1. Неструктурированное, «стихийное» программирование
- •1.2. Процедурное (модульное) программирование
- •1.3. Объектно-ориентированное программирование
- •1.4. Компонентные технологии программирования
- •Тема 2. Жизненный цикл программы и основные
- •2.1. Дружественность, жизненный цикл программы
- •2.2. Постановка задачи и спецификация программы
- •2.3. Проектирование и реализация программы
- •2.4. Способы записи алгоритма
- •2.5. Критерии качества программы
- •3.1. Классификация программных продуктов
- •3.3. Модели программирования в ms-dos и Windows
- •Тема 4. Диалоговые программы
- •4.1. Типы пользовательских интерфейсов
- •4.2. Классификация диалогов и их реализация
- •4.3. Основные компоненты графических
- •Тема 5. Программа на языке высокого уровня
- •5.1. Структура программы и функции
- •5.2. Стандартные типы данных и операции над ними
- •5.3. Адресные типы данных: указатели и ссылки
- •5.4. Стандартные библиотеки языка
- •5.5. Классы памяти
- •Раздел 2 Управляющие структуры и структуры данных
- •Тема 6. Представление управляющих структур
- •6.1. Структура следования
- •6.2. Структуры ветвления
- •6.3. Структуры повторения
- •Int kol, //счетчик введенных оценок
- •Int god; //число лет
- •Тема 7. Адресные типы данных
- •7.1. Указатели
- •7.2. Ссылки
- •Тема 8. Структуры данных фиксированного размера
- •8.1. Массивы
- •8.2. Типы данных, определяемые пользователем
- •Тема 9. Функции (процедуры)
- •9.1. Определение, прототип и вызов функции
- •9.2. Передача параметров
- •9.3. Программирование рекурсивных алгоритмов
- •Тема 10. Динамические структуры данных
- •10.1. Списки: основные виды и способы реализации
- •10.2. Динамическое выделение памяти
- •Раздел 3 Процедурное программирование
- •Тема 11. Ввод/вывод данных
- •11.1. Видеофункции библиотеки conio.H
- •11.2. Функции библиотеки потокового ввода/вывода
- •Тема 12. Обработка файлов данных
- •12.1. Записи и файлы данных
- •12.2. Операции и средства обработки файлов
- •12.3. Контроль операций обработки файлов
- •Тема 13 Технология процедурного программирования
- •13.1. Способы конструирования программ
- •13.2. Проектирование программы: методы декомпозиции и и модульного программирования
- •13.3. Реализация программы: методы структурного
- •Тема 14. Введение в технологию объектно-
- •14.1. Основные понятия объектно-ориентированного
- •14.2. Проектирование программы
- •14.3. Реализация программы
- •Утверждаю
- •Рабочая программа
- •Технология программирования
- •Санкт-Петербург
- •Тема 1. Технология программирования и этапы ее
- •Тема 2. Жизненный цикл программы и основные этапы
12.3. Контроль операций обработки файлов
Контроль операций обработки файлов заключается в проверке состояния потока (обнаружение ошибок) и ,если возможно, восстановление потока (очистка ошибок). Рассмотрим средства, проверяющие операции открытия файла, чтения и записи.
Состояние потока оценивается битами класса ios:
goodbit - устанавливается, если операция прошла успешно;
eofbit - устанавливается, если больше нет символов для чтения, т.е. конец файла;
failbit - устанавливается, если операция чтения/записи закончилась с ошибкой; поток можно использовать после сброса бита;
badbit - устанавливается, если операция чтения/записи закончилась ошибкой; возможна потеря символов, но можно попробовать исправить, сбросив бит;
hardbit - устанавливается при неисправимой ошибке.
Восстановление потока, т.е. очистка битов ошибки, осуществляется функцией clear:
p.clear(n); ,
где n - либо код бита (0,1,2,4,80), либо его мнемоническое обозначение; при n=0 происходит очистка всех битов ошибок.
Состояние потока можно проверить различными способами. Проверка состояния потока с обнаружением конкретной ошибки выполняется функцией rdstate, которая возвращает код бита ошибки.
Пример:
switch(p.rdstate()) //p - поток
{
case ios::goodbit: //операция успешна,продолжение программы
break;
case ios::eofbit: //конец файла, продолжение программы
break;
case ios::failbit: //ошибка, восстановление потока
break;
case ios::badbit: //ошибка, попытка восстановления потока
break;
case ios::hardbit: //неисправимая ошибка, выход из программы
break;
}
Альтернативным, вторым способом проверки состояния потока является использование функций класса ios:
good() - возвращает истину (не ноль),если установлен goodbit (нет ошибок); возвращает ложь(ноль),если бит не установлен;
eof() - возвращает истину, если установлен eofbit (конец файла); возвращает ложь,если бит не установлен;
fail() - возвращает истину, если установлен failbit,badbit или hardbit; возвращает ложь,если биты не установлены;
bad() - возвращает истину, если установлен badbit или hardbit; возвращает ложь,если биты не установлены.
Примеры:
if (!p.good()) if (p.fail()) while(!p.eof())
{ { {
cerr<<"Ошибка..."; cerr<<"Ошибка..."; //нет конца файла
exit(-1); //выход exit(-1);//выход ...
} } }
Удобен третий способ проверки состояния потока представлением имени потока или операции чтения/записи в виде логического выражения в операторах if, for, while, do-while.
Примеры :
if (p) if (!p)
{ {
//продолжение программы cerr<<"Ошибка...";
... exit(-1);//выход
} }
if (p.read((char*)&z,sizeof(z))) if(!p.read((char*)&z,sizeof(z)))
{ {
//продолжение программы cerr<<"Ошибка чтения...";
... exit(-1);//выход из программы
} }
Имя потока p и операция чтения p.read имеют значение не ноль (истинно), если нет ошибки, и ноль (ложно), если есть ошибка.
Последние два способа используют перегруженную операцию НЕ (!) библиотеки потокового ввода/вывода.
Контрольные вопросы
Какие средства ввода/вывода имеет библиотека conio.h?
Какие средства ввода/вывода имеет библиотека iostream.h?
Что такое операции извлечения (>>) и вставки (<<)?
Какие имеются способы форматирования ввода/вывода?
Какие средства обработки файлов имеет библиотека потокового ввода/вывода fstream.h?
Как осуществляется контроль обработки файлов?