- •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.2 Дополнительные функции файлового ввода/вывода
Классы потоков ввода/вывода содержат множество полезных функций для работы с файлами. Ниже описаны некоторые из них.
filebuf* rdbuf();
Возвращает указатель на буфер, связанный с потоком.
int is_open();
Осуществляет проверку того, было ли успешным открытие файла. Возвращает нулевое значение в случае ошибки. Пример:
if (!fin.rdbuf()->is_open())
cerr<<”Не удалось открыть файл…\n”;
int eof();
Возвращает ненулевое значение, если достигнут конец файла:
while (!fin.eof())
fin>>x;
void clear(int=0);
Устанавливает состояние потока в ноль. Эту функцию необходимо вызывать, если работу с потоком нужно продолжать после возникновения таких ситуаций, как достижение конца файла, ошибка при обмене с потоком и т.п.
ostream& put(char);
Выводит в поток один символ. Допускает сцепленный вызов:
fout.put(‘A’).put(‘\n’);
ostream& write(const signed char*,int n);
ostream& write(const unsigned char*,int n);
Выводит в файл из символьного массива, на который указывает первый параметр, число символов, указанных вторым параметром. Например, оператор
fout.write(s,5);
записывает в поток fout 5 символов из массива s. Причем эти символы никак не обрабатываются, а просто выводятся в качестве сырых байтов данных. Среди этих символов, например, может встретиться в любом месте нулевой символ, но он не будет рассматриваться как признак конца строки.
istream& read(signed char*,int);
istream& read(unsigned char*,int);
Аналогичный метод для чтения данных в символьный массив также без всякой обработки.
int gcount();
Используется совместно с предыдущей функцией. Возвращает количество символов, действительно прочитанных последней операцией ввода.
int get();
Читает одиночный символ из указанного потока (даже если это символ-разделитель) и возвращает этот символ в качестве значения вызова функции. Если в потоке встретился признак конца файла, возвращает значение EOF. Данный вариант функции удобно использовать для поиска в файле какого-то ключевого символа. Например, цикл поиска в файле символа «$» можно организовать следующим образом:
char c;
while ((c=fin.get())!=EOF)
if (c==’$’)
break;
if (c==’$)
...
istream& get(unsigned char&);
istream& get(signed char&);
Вводит очередной символ из входного потока (даже если это символ-разделитель) и сохраняет его в символьном аргументе. Этот вариант функции возвращает 0, когда встречается признак конца файла; в остальных случаях возвращается ссылка на тот поток, для которого вызывалась функция. Предыдущий пример с использованием данного варианта функции get() можно было бы переписать так:
while (fin.get(c))
...
istream& get(signed char*,int,char=’\n’);
istream& get(unsigned char*,int,char=’\n’);
Третий вариант функции get() принимает три параметра: символьный массив, максимальное число элементов и символ-ограничитель (по умолчанию символ перевода строки ‘\n’). Символы читаются из входного потока до тех пор, пока не достигается число символов, на 1меньшее указанного максимального числа, или пока не считывается ограничитель. Затем для завершения введенной строки в символьный массив помещается нулевой символ. Ограничитель в символьный массив не помещается, а остается во входном потоке (он будет следующим считываемым символом). Таким образом, результатом второго подряд использования функции get() явится пустая строка, если только ограничитель не удалить из входного потока.
istream& getline(signed char*,int,char=’\n’);
istream& getline(unsigned char*,int,char=’\n’);
Действует подобно предыдущему (третьему) варианту функции get(), но удаляет символ-ограничитель из потока (т.е. читает этот символ и отбрасывает его); этот символ не сохраняется в символьном массиве. С помощью getline() можно следующим образом записать цикл чтения файла по строкам:
while (!fin.eof())
{ fin.getline(s,80);
... //обработка строки
}