![](/user_photo/2706_HbeT2.jpg)
- •1.2Типы данных
- •1.2.1Объявление переменной
- •1.2.2Категории типов данных
- •1.2.3Целый тип данных
- •1.2.4Данные с плавающей точкой (вещественные типы)
- •1.3Знаки операций
- •1.3.3Простое присваивание
- •1.3.4Составное присваивание
- •1.3.5Приоритеты операций и порядок вычислений
- •1.4Структура и компоненты программы на языке си
- •1.5Организация ввода-вывода в стиле си
- •1.6.1 Манипуляторы и форматирование ввода-вывода
- •1.7Математические функции
- •2Алгоритм. Элементы структурного программирования
- •2.1Понятие алгоритма
- •2.2Основные требования к алгоритмам
- •2.3Элементы структурного программирования
- •3Программирование алгоритмов линейной структуры
- •4Алгоритмы и программы ветвящейся структуры. Условный оператор if. Переключатель switch
- •4.1Алгоритмы и программы ветвящейся структуры
- •4.1.1Условный оператор if
- •If (выражение) оператор1;
- •4.1.2Логические операции
- •4.2Примеры составления алгоритмов и программ с использованием условного оператора If
- •4.3Переключатель switch
- •5Алгоритмы и программы циклической структуры
- •5.1 Понятие цикла. Разновидности циклов
- •5.3Оператор while
- •5.4Оператор do while
- •5.5Оператор continue
- •6Регулярные типы данных. Массивы
- •6.1 Понятие регулярного типа
- •6.2Алгоритмы сортировки массивов
- •6.3 Постановка задачи сортировки и методы её решения
- •6.4Алгоритм прямого упорядочения (Алгоритм сортировки выбором элемента)
- •6.5Алгоритм попарного сравнения соседних элементов («пузырьковая» сортировка)
- •6.6Алгоритм сортировки выбором элемента
- •6.7Методы доступа к элементам массивов, использование указателей
- •6.8Организация многомерных массивов. Указатели на многомерные массивы
- •7.1Описание и определение функции
- •7.2Вызов функции
- •7.3Передача параметров в функцию
- •7.4Описание прототипа функции
- •7.5Функция с переменным количеством параметров
- •7.6Понятие сигнатуры функции
- •7.7Подставляемые (встраиваемые) функции
- •7.8Передача параметров в главную функцию
- •7.9Рекурсивные вызовы функции
- •7.10Примеры составления функций
- •8Указатели
- •8.1Понятие указателя
- •8.2Инициализация указателей
- •8.3Операции с указателями
- •8.4Ссылки
- •9Структуры (struct)
- •10Динамические структуры данных
- •3.1 Односвязные списки
- •Д обавление в начало списка.
- •2 ) Добавление в середину списка.
- •У даление первого элемента списка.
- •3 )Удаление элемента из середины списка.
- •Int Data; //поле данных
- •If (!q) //...И он первый в списке
- •3.2 Стек
- •3.3 Очередь
- •11Динамические массивы
- •12Функции и массивы
- •13Указатели на функции
- •14.1Файловый ввод/вывод с помощью потоков
- •14.2 Дополнительные функции файлового ввода/вывода
- •14.3Режимы файлов
- •14.4 Двоичные файлы
- •14.5Произвольный доступ к файлам
- •Список использованных источников
14.1Файловый ввод/вывод с помощью потоков
В языке С++ файл рассматривается как поток (stream), представляющий собой последовательность считываемых или записываемых байтов. При этом поток «не знает», что и в какой последовательности в него записано. Расшифровка смысла записанных последовательностей байтов лежит на программе.
Язык С++ работает с файловым вводом/выводом во многом так же, как он это делает со стандартным вводом/выводом. Для работы с файлами необходимо подключить заголовочный файл fstream.h. При этом автоматически включается и файл iostream.h, поэтому его не нужно подключать явно.
В С++ определены три класса файлового ввода/вывода:
ifstream – входные файлы для чтения;
ofstream – выходные файлы для записи;
fstream – файлы для чтения и записи.
Предположим, что программе необходимо записать информацию в файл. Для этого необходимо сначала создать переменную (объект) типа ofstream для управления потоком вывода, например:
ofstream fout;
Имя объекта может быть любым допустимым именем С++.
Затем необходимо поставить в соответствие объекту определенный файл. Это можно сделать с помощью функции open():
fout.open(“test.dat”);
Два этих этапа (создание объекта и связывание его с файлом) можно объединить в одном операторе:
ofstream fout(“test.dat”);
После этого объект fout можно использовать точно так же, как и cout:
int i=1,j=25;
double a=25e6;
char s[10]=”строка”;
fout<<i<<’ ‘<<j<<’ ‘<<a<<’ ‘<<s<<endl;
В этом коде с помощью одного оператора осуществляется запись в файл в текстовом виде данных разного типа: двух целочисленных переменных, действительного числа и строки. После того, как файл закроется, в нем будет записан текст «1 25 2.5е+07 строка».
Открытие файла таким способом позволяет создать новый файл, если файла с таким именем не существует. Если же такой файл уже есть, то до открытия для вывода этот файл урезается до нулевого размера и информация начинает выводиться в пустой файл.
Требования к чтению файла очень похожи на требования к записи:
Создать переменную (объект) типа ifstream для управления потоком ввода.
Поставить этот объект в соответствие определенному файлу.
Использовать объект так же, как cin.
Например:
ifstream fin;
fin.open(“test.txt”);
//или fstream fin(“test.txt”);
int x;
float f;
char st[20];
fin>>x>>f; //чтение из файла числовых данных
fin.getline(st,20); //чтение строки
При установлении связи между файлом и потоком могут возникнуть ошибки (например, при открытии файла для чтения нужного файла нет на диске). В этом случае значение объекта потока равно 0, и этот факт можно использовать для отслежтвания таких ошибок:
if (!fin)
{ cout<<”Ошибка!!!\n;
return;
}
Связь с файлом прекращается автоматически, если истекает срок действия объектов потока ввода/вывода, например, по окончании выполнения программы. Кроме того, связь с файлом можно прервать явно, воспользовавшись функцией close():
fout.close();
fin.close();
При прерывании такой связи поток не ликвидируется, он просто отключается от файла. Этот поток можно вновь соединить с тем же самым или с другим файлом.
Если необходимо одновременно работать с несколькими открытыми файлами, то для каждого из них нужно создавать отдельный поток.