Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ввод-вывод.doc
Скачиваний:
8
Добавлен:
18.04.2015
Размер:
273.92 Кб
Скачать

Манипуляторы с параметрами ( определены в файле iomanip.H )

setbase ( int n) - устанавливает основание системы счисления

cout << setbase (8) << 255 <<setbase (16) << 255 377 ff

resetiosflags (long L) -сбрасывает отдельные флаги

setiosflags (long L) - устанавливает отдельные флаги

cout<<setw(5)<< setiosflags( ios::left)<<5<<»\n»<<setw(5)<<

resetiosflags( ios::left) <<5; 5

5

setfill( int n) - значение параметра – код заполнителя

for (int i=0; i<3; i++) cout <<setfill(46)<<setw(5+i)<<i+1<<»\n»;

….1

…..2

……3

setprecision( int n) -определяет точность представления числа при вводе –

вывода вещественного числа , количество цифр

дробной части

for(int i =0 ; i< 4; i++) cout<<setprecicion(i)<<1.2345<<»\n» 1.2345

1.2

1.23

1.234

setw( int n) - параметр задает поле вывода

При использовании манипулятора setw как и член – функции width необходимо указывать требуемую ширину отдельно для каждого выводимого значения.

cout << setiosflags(ios::scientific)<< 0.000123; 1.23e-04

cout << setiosflags(ios::fixed)<< 0.000123; 0.000123

Ввод-вывод для типов, определенных пользователем

Необходимо расширить действие операций >>и << на данные производного типа.

Это делается с помощью операций – функций ( перегрузка операций). Первый параметр операции - функции ссылка на объект класса (поток). Второй параметр - ссылка на объект желаемого типа для ввода или сам желаемый тип для вывода.

Тип возвращаемого результата – ссылка на объект класса, т. е. на поток

Пример Вывод структуры

#include <iostream.h>

struct st // объявлена структура

{char* name ; long sh, cen ;}zap1 ={ « ножницы», 1756 , 43};

st A [5];

// перегрузка операции включения в поток:

ostream& operator << (ostream& out , st& zap) //операция- функция для

//вывода структуры на экран

{ out << «\n»<<zap.name<<» » << zap.sh<<» « << zap.cen

return out ; }

/*Эквивалентно было написать:

{ return cout << «\n»<<zap.name<<» » << zap.sh<<» « << zap.cen;} */

// Перегрузка операции извлечения из потока:

istream& operator >> ( istream& in , st & zap) //операция функция для ввода

// с клавиатуры структуры

{ in >> zap.name >> zap. sh >> zap.cen; return in ;}

// вводятся три значения через <enter

/* Или эквивалентно:

{ return in >> zap.name >> zap. sh >> zap.cen;} */

… void main()

{ … for(int I=0; I<5; I++) {cin>> A[I]; cout<< A[I];}

cout<<zap1<<A[0];…

В связи с тем , что операции-функции возвращают ссылку на поток , их можно использовать в цепочке вводов или выводов.

Функции для обмена с потоком

Кроме операций включения >> в поток и извлечения <<из потока имеются альтернативные компонентные функции ввода – вывода.

Функции вывода

В классе выходного потока определены две функции для двоичного вывода данных в стандартный поток:

ostream & ostream::put(char c);

ostream & ostream::write ( const signed char * array, int n);

ostream & ostream::write ( const unsigned char * array, int n);

Функция put (‘ ‘) помещает в выходной поток (объект для которого она вызвана ) символ – параметр:

cout .put(‘ X’) ( аналогично cout<<’X’; )

Первый параметр функции write - указатель array на символьный массив на участок оперативной памяти из которого извлекаются побайтно данные для вывода в поток, параметр n определяет количество выводимых байт.

Флаги форматирования и компонентные функции для форматирования не применимы к функциям put и write. Т.е. в отличии от операции включения в поток << эти функции не обеспечивают форматного вывода, напр., символ выводится всегда в одну позицию потока.

Функции put и write возвращают указатель на объект (поток) , поэтому из них также можно составлять цепочки вывода

char mas[] =”Миру-мир”;

int r = sizeof ( mas) -1;

cout.put(‘\n’) . write (mas , r). put(‘!’) . put(‘\n’);

//Миру-мир!