#include
using namespace std;
int main()
{
cout << setprecision (2) << 1000.243 << endl;
cout << setw(20) << "Всем привет! ";
return 0;
}
Результаты выполнения этой программы таковы.
1е+003
Всем привет!
Обратите внимание на то, как используются манипуляторы в цепочке операций ввода-вывода. Кроме того, отметьте, что, если манипулятор вызывается без аргументов (как, например, манипулятор
В следующей программе используется манипулятор
#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
А в этой программе демонстрируется использование манипулятора
#include
using namespace std;
int main()
{
char s[80];
cin >> ws >> s;
cout << s;
return 0;
}
Программист может создавать собственные манипуляторные функции. Существует два типа манипуляторных функций: принимающие и не принимающие аргументы. Для создания параметризованных манипуляторов используются методы, рассмотрение которых выходит за рамки этой книги. Однако создание манипуляторов, которые не имеют параметров, не вызывает особых трудностей.
Все манипуляторные функции вывода данных без параметров имеют следующую структуру.
ostream &manip_name(ostream &stream)
{
// код манипуляторной функции
return stream;
}
Здесь элемент
В следующей программе создается манипулятор
#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;
}
Например, в следующей программе создается манипулятор
#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;
}
Помните: очень важно, чтобы ваш манипулятор возвращал потоковый объект (элемент
В С++-системе ввода-вывода также предусмотрены средства для выполнения соответствующих операций с использованием файлов. Файловые операции ввода-вывода можно реализовать после включения в программу заголовка