Организация потокового ввода вывода. Процедурно-ориентированные средства работы с потоками, страница 6

long setf (long setbits, longfield); // биты, помещенные в параметре field сбрасываются,

 // биты, помещенные в параметре setbits устанвливаются

long unsetf (long);                  // сбрасываются все биты флагов, помеченные в параметре

int width ( );                            // возвращается значение ширины поля

int width (int);                        // устанавливается значение ширины поля

#include <iostream.h>

void main ()

{

 cout << 123.23 << " привет" << 100 <<”\n”;

 cout << 10 << " “ << -10 << "\n";

 cout << 100.0 << "\n";

 cout.setf (ios::hex | ios: scientific);

 cout << 123.23 << "привет" << 100 << "\n";

 cout.setf (ios :: showpos);

 cout  << 10 << " " -10 << "\n”;

 cout.setf (ios :: showpoint | ios::fixed);

 cout << 100.0

}

Получим:

123.23 привет 100

10 -10

100

1.2323e+02 привет 64

a fffffff6

+100.000000

#include <iostream.h>

void main()

{

 long f = 0x04A4; // установить showpos, showbase, octright, остальные сбросить

 cout.flags(f);            

}

cout.width(10);

cout << 123.234567 << "\n";         //123.234567

cout.precision(3);

cout.fill('%');

cout << 123.234567 << "\n";         //123.235%%%

Манипуляторы ввода/ вывода

      Это функции, позволяющие изменять состояние и флаги потока. Их можно  использовать в качестве правых операндов операций вставки и извлечения. Левым операндом является поток, на состояние которого влияет манипулятор. Манипуляторы получают и возвращают ссылки на поток, поэтому их можно связывать в цепочки.

Манипуляторы без параметров определены в модуле ios:

·  dec, hex, oct - задают систему счисления,

·  ws – пропуск пробелов и управляющих символов (используется при вводе),

·  endl – вывод символа новой строки и сброс буфера (используется только при выводе),

·  ends – включение в поток признака конца строки (при выводе).

// при отсутствии endl не гарантии, что сообщение не останется в буфере

cout << "сообщение" << endl;

// рекомендуется сбрасывать буфер потока при выводе подсказки до следующего ввода

cout << " введите имя файла " << flush;

cin >> filename;

Манипуляторы с параметрами определены в модуле  iomanip.h.

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

·  resetiosflags (long L);                        // сбрасывает основание системы счисления

·  setiosflags (long L);     // устанавливает флаги в соответствии с единичными битами

·  setfill (int n);                           // устанавливает символ заполнения

·  setprecision (int n);                 //устанавливает точность заполнения

·  setw (int n);                                                // устанавливает ширину поля вывода

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

Функции бинарного вывода (бесформатного):

·  ostream& ostream::put(char c);

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

// * array – указатель на участок памяти,

// n – количество символов.

Функции бинарного чтения (бесформатного):

Используются, если нужно прочитать из входящего потока строку символов, содержащую пробелы (с помощью операции << чтение выполняется до пробела, а левые пробелы игнорируются).

·  istream& get (unsigned char* array, int max_len, char='\n');

// 1-й параметр – указатель на буфер,

// max_len – максимально допустимое количество вводимых символов,

// 3-й параметр – ограничивающий символ, вместо него в формируемый символьный массив

// заносится ‘\0’.