#include

using namespace std;

int main()

{

 cout << setprecision (2) << 1000.243 << endl;

 cout << setw(20) << "Всем привет! ";

 return 0;

}

Результаты выполнения этой программы таковы.

1е+003

Всем привет!

Обратите внимание на то, как используются манипуляторы в цепочке операций ввода-вывода. Кроме того, отметьте, что, если манипулятор вызывается без аргументов (как, например, манипулятор endl в нашей программе), то его имя указывается без пары круглых скобок.

В следующей программе используется манипулятор setiosflags() для установки флагов scientific и showpos.

#include

#include

using namespace std;

int main()

{

 cout << setiosflags(ios::showpos);

 cout << setiosflags(ios::scientific);

 cout << 123 << " " << 123.23;

 return 0;

}

Вот результаты выполнения данной программы.

+123 +1.232300е+002

А в этой программе демонстрируется использование манипулятора ws, который пропускает ведущие "пробельные" символы при вводе строки в массив s:

#include

using namespace std;

int main()

{

 char s[80];

 cin >> ws >> s;

 cout << s;

 return 0;

}

Создание собственных манипуляторных функций

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

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

ostream &manip_name(ostream &stream)

{

 // код манипуляторной функции

 return stream;

}

Здесь элемент manip_name означает имя манипулятора. Важно понимать, что, несмотря на то, что манипулятор принимает в качестве единственного аргумента указатель на поток, который он обрабатывает, при использовании манипулятора в результирующем выражении ввода-вывода аргументы не указываются вообще.

В следующей программе создается манипулятор setup(), который устанавливает флаг выравнивания по левому краю, ширину поля равной 10 и задает в качестве заполняющего символа знак доллара.

#include

#include

using namespace std;

ostream &setup(ostream &stream)

{

 stream.setf(ios::left);

 stream << setw(10) << setfill ('$');

 return stream;

}

int main()

{

 cout << 10 << " " << setup << 10;

 return 0;

}

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

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

istream &manip_name(istream &stream)

{

 // код манипуляторной функции

 return stream;

}

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

#include

#include

using namespace std;

istream &prompt(istream &stream)

{

 cin >> hex;

 cout << "Введите число в шестнадцатеричном формате: ";

 return stream;

}

int main()

{

 int i;

 cin >> prompt >> i;

 cout << i;

 return 0;

}

Помните: очень важно, чтобы ваш манипулятор возвращал потоковый объект (элемент stream). В противном случае этот манипулятор нельзя будет использовать в составном выражении ввода или вывода.

Файловый ввод-вывод

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

Как открыть и закрыть файл
Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги