- •Ю.А Петров Программирование на языке высокого уровня
- •Часть 1
- •Введение
- •Задание
- •Комментарии
- •Идентификаторы
- •Ключевые слова
- •Константы
- •Управляющие последовательности
- •Строковые литералы
- •Константные выражения
- •Пунктуаторы
- •Операции
- •Задание на лабораторную работу 2 разработка программы линейной структуры Цель работы
- •Отчет по лабораторной работе должен содержать:
- •Задание
- •Замечания
- •Варианты заданий
- •Классификация ошибок
- •Ошибки, не обнаруженные компилятором
- •Ситуации, возникающие при неверных результатах
- •Отладка программы
- •Предупреждения
- •Первое сообщение об ошибке
- •Использование команд Find и Replace
- •Быстрое обнаружение ошибочных строк
- •Продолжение отладки
- •Использование встроенного отладчика
- •Разница между командами Step Into и Step Over
- •Дополнительные средства отладки
- •Работа с точками останова
- •Краткая характеристика объектов
- •Формат 1:
- •Стиль программирования
- •Задание на лабораторную работу 4 объекты и их характеристики Цель работы
- •В отчете по лабораторной работе следует представить:
- •5 Структурное программирование
- •Пример1
- •Пример 2
- •Задание на лабораторную работу 5 разработка программы со структурой «развилка» Цель работы
- •Задание:
- •Варианты задания
- •Задание на лабораторную работу 6 создание цикловых программ с фиксированным числом повторений Цель работы
- •Задание
- •Варианты задания
- •Задание на лабораторную работу 7 создание программ с итерационными циклами Цель работы
- •Задание
- •Варианты задания
- •Пояснения к выполнению лабораторной работы 7
- •6 Агрегаты данных
- •Структура
- •Объединения
- •Перечисления
- •Int array[3]; // Объявление определения;
- •Многомерные массивы
- •Вывод в файловый поток
- •Чтение из входного файлового потока
- •Чтение целой строки файлового ввода
- •Определение конца файла
- •Проверка ошибок при выполнении файловых операций
- •Закрытие файла
- •Управление открытием файла
- •Выполнение операций чтения и записи
- •Задание на ргз 1 использование структур данных при решении задач Цель работы
- •Задание
- •Варианты задания
- •7 Модульное программирование
- •Задание на ргз 2 использование модульного программирования при решении задач
- •Перемещаемые панели инструментов
- •Меню File
- •Меню Edit
- •Меню View
- •Меню Insert
- •Меню Project
- •Меню Build
- •Меню Tools
- •Меню Window
- •Список открытых окон
- •Меню Help
- •Приложение 2 Некоторые функции языка с
- •Используемая литература
- •Оглавление
- •5 Структурное программирование 53
Определение конца файла
Обычной файловой операцией в программах является чтение содержимого файла до тех пор, пока не встретится конец файла. Чтобы определить конец файла, в программе можно использовать функцию еоf потокового объекта. Эта функция возвращает значение 0, если конец файла еще не встретился, и 1, если встретился конец файла. Используя цикл while, можно непрерывно читать содержимое файла, пока не будет достигнут конец файла. Например:
while (! input_file.eof())
{
// Операторы
}
В данном случае программа будет продолжать выполнять цикл, пока функция eof возвращает ложь (0). Следующая программа TEST_EOF.CPP использует функцию eof для чтения содержимого файла BOOKINFO.DAT, пока не будет достигнут конца файла. Например:
#include <iostream.h>
#include <fstream.h>
void main (void)
{
ifstream input_file("BOOKINFO.DAT");
char line[64];
while (! input_file.eof())
{
input_file.getline(line, sizeof(line));
cout << line << endl;
}
}
Аналогично, следующая программа WORD_EOF.CPP читает содержимое файла по одному слову за один раз, пока не встретится конец файла:
#include <iostream.h>
#include <fstream.h>
void main(void)
{ ifstream input_file("BOOKINFO.DAT");
char word[64] ;
while (! input_file.eof())
{
input_file >> word;
cout << word << endl;
}
}
И наконец, следующая программа CHAR_EOF.CPP читает содержимое файла по одному символу за один раз, используя функцию get, пока не встретит конец файла. Например:
#include <iostream.h>
#include <fstream.h>
void main(void)
{
ifstream input_file("BOOKINFO.DAT");
char letter;
while (! input_file.eof())
{
letter = input_file.get();
cout << letter;
}
}
Проверка ошибок при выполнении файловых операций
Рассмотренные нами программы не контролировали наличия ошибок при вводе-выводе, например: наличие файла при вводе или успешное выполнение операции при выводе в файл. Для контроля за наличием ошибок можно использовать функцию fail(). Если в процессе файловой операции ошибок не было, то эта функция возвратит ложь (0). Однако если встретилась ошибка, функция fail() возвратит истину. Например:
ifstream input_file("FILENAME.DAT");
if (input_file.fail())
{
cerr << "Ошибка открытия FILENAME.EXT" << endl;
exit(1);
}
Следующая программа TEST_ALL.CPP использует функцию fail() для проверки различных ошибочных ситуаций. Например:
#include <iostream.h>
#include <fstream.h>
void main(void)
{
char line[256] ;
ifstream input_file("BOOKINFO.DAT") ;
if (input_file.fail()) cerr << "Ошибка открытия BOOKINFO.DAT" << endl;
else
{
while ((! input_file.eof()) && (! input_file.fail()))
{
input_file.getline(line, sizeof(line)) ;
if (! input_file.fail()) cout << line << endl;
}
}
}
Закрытие файла
При завершении программы операционная система закроет открытые ею файлы. Однако, как правило, если программе файл больше не нужен, она должна его закрыть. Для закрытия файла программа должна использовать функцию close(). Например:
input_file.close ();
Управление открытием файла
Мы рассмотрели примеры программ, в которых файловые операции ввода и вывода выполнялись с начала файла. Однако если необходимо записать данные в выходной файл, можно добавлять информацию в конец существующего файла. Для открытия файла в режиме дозаписи необходимо использовать второй параметр. Например:
ifstream output_file("FILENAME.EXT", ios::app);
В данном случае параметр ios::app указывает режим открытия файла. Режимы открытия файлов представлены в табл. 6.1.
Таблица 6.1 – Значения режимов открытия.
Режим открытия |
Назначение |
ios::app |
Открывает файл в режиме добавления, располагая файловый указатель в конце файла |
ios::ate |
Устанавливает файловый указатель в конце файла |
ios::in |
Указывает открыть файл для ввода |
ios::nocreate |
Указывает, если указанный файл не существует, не создавать файл и возвратить ошибку |
ios::noreplace |
Указывает, если файл существует, операция открытия должна быть прервана и должна возвратить ошибку |
ios::out |
Указывает, что надо открыть файл для вывода |
ios::trunc |
Сбрасывает (перезаписывает) содержимое существующего файла |
Чтобы предотвратить перезапись существующего файла следующая инструкция, используя режим ios::noreplace, открывает файл для вывода:
ifstream output_file("Filename.EXT", ios::out ios::noreplace);