Изучение языка программирования С++. Описание основных алгоритмов и синтаксиса языка C++, страница 7

setfill(int n) - установливает символ-заполнитель; этим символом выводимое значение будет дополняться до необходимой ширины;

setprecision(int n) - установливает количество цифр после запятой (для вещественных чисел);

setbase(int n)  -установливает систему счисления для вывода чисел; n может принимать значения 0, 2, 8, 10, 16, причем 0 означает систему счисления по умолчанию, т.е. 10.

Манипуляторы просто выводят в выходной поток.

Аналогично используются манипуляторы с параметрами. Вывод числа с разным количеством цифр после запятой:

double x;

// вывести число в поле общей шириной

// 6 символов (3 цифры до запятой,

// десятичная точка и 2 цифры после запятой)

cout << setw(6) << setprecision(2) << fixed << x << endl;

При вводе используют все вышеперечисленные манипуляторы кроме endl и ends. Манипулятор ws используют только при вводе. Он переключает вводимый поток в такой особый режим, при котором все пробелы (табуляция, перевод строки, перевод каретки и перевод страницы) будут введены. По умолчанию эти символы являются разделителями между атрибутами ввода.

2.1.4 Строковые потоки

Класс strstream автоматически выделяет нужное количество памяти для хранения строк.

Когда программа обращается к конкретной хранимой в объекте строке, используя метод str (), объект не контролирует память, следовательно, при уничтожении объекта память не освободится. Чтобы память освободилась, следует использовать метод rdbuf()->freeze(0).

2.1.5 Ввод-вывод файлов

Осуществлять ввод-вывод файлов может из стандартных функций библиотеки Си (функции низкого уровня) и, используя потоки ввода-вывода.

Файл является последовательностью байтов. Чтение или запись файлов всегда выполняются последовательно, т.е. всегда определяется текущая позиция, с нее будет выполняться следующая операция.

При прямом доступе операции ввода-вывода выполняются не последовательно, а в произвольном порядке. При написании программ на языке Си++ возможность прямого доступа обеспечена тем, что текущую позицию чтения или записи можно установить явно.

Классы ofstream (вывод) и ifstream (ввод) в Си++ используются для ввода-вывода файлов, они выводятся из класса fstream. Сами операции ввода-вывода выполняются так же, как и для других потоков – операции >> и << определены для класса fstream как "ввести" и "вывести" соответствующее значение.

Если требуется вывести информацию в файл нужно определить вид файла, в который будем выводить информацию. Для этого используют конструктор класса ofstream в виде:

ofstream(const char* szName,

int nMode = ios::out,

int nProt = filebuf::openprot);

Обязательным аргументом в данной ситуации является первый аргумент (имя выходного файла). За тем задается режим, в котором будет открыт поток. Этот аргумент – битовое ИЛИ следующих величин:

ios::app - данные будут добавлены в конец файла, даже если текущая позиция была перед этим перемещена;

ios::ate - текущая позиция будет помещена в конец файла, но запись произойдет в текущую позицию;

ios::in - поток будет создан для ввода; если файл существует, он сохранится;

ios::out - поток создан для вывода (режим по умолчанию);

ios::trunc - если файл существовал, его содержимое уничтожится, и длина файла будет равна нулю; режим действует по умолчанию, если не заданы ios::ate, ios::appили ios::in ;

ios::binary – двоичный вид ввода-вывода, по умолчанию используется текстовое представление данных.

Если мы хотим создать новый файл, тогда будет использован и третий аргумент, он и определит параметры нового файла.

В стандартном конструкторе создают поток вывода без аргументов, а потом используют метод open с такими же аргументами, как у предыдущего конструктора:

void open(const char* szName,

int nMode = ios::out,

int nProt = filebuf::openprot);

Когда поток  уже создан, присоединен к определенному файлу, можно осуществить вывод. Выводят данные операцией <<, либо используя методы write или put.