Часто бывает необходимо вывести строку или число в определенном формате. Для этого используются так называемые манипуляторы.
Манипуляторы – это объекты особых типов, которые управляют тем, как ostream или istream обрабатывают последующие аргументы. Некоторые манипуляторы могут также выводить или вводить специальные символы.
С одним манипулятором мы уже сталкивались, это endl. Он вызывает вывод символа новой строки. Другие манипуляторы позволяют задавать формат вывода чисел:
endl
| при выводе перейти на новую строку;
|
ends
| вывести нулевой байт (признак конца строки символов);
|
flush
| немедленно вывести и опустошить все промежуточные буферы;
|
dec
| выводить числа в десятичной системе (действует по умолчанию);
|
oct
| выводить числа в восьмеричной системе;
|
hex
| выводить числа в шестнадцатеричной системе счисления;
|
setw (int n)
| установить ширину поля вывода в n символов (n – целое число);
|
setfill(int n)
| установить символ-заполнитель; этим символом выводимое значение будет дополняться до необходимой ширины;
|
setprecision(int n)
| установить количество цифр после запятой при выводе вещественных чисел;
|
setbase(int n)
| установить систему счисления для вывода чисел; n может принимать значения 0, 2, 8, 10, 16, причем 0 означает систему счисления по умолчанию, т.е. 10.
|
Использовать манипуляторы просто – их надо вывести в выходной поток. Предположим, мы хотим вывести одно и то же число в разных системах счисления:
int x = 53;
cout << "Десятичный вид: " << dec
<< x << endl
<< "Восьмеричный вид: " << oct
<< x << endl
<< "Шестнадцатеричный вид: " << hex
<< x << endl
Аналогично используются манипуляторы с параметрами. Вывод числа с разным количеством цифр после запятой:
double x;
// вывести число в поле общей шириной
// 6 символов (3 цифры до запятой,
// десятичная точка и 2 цифры после запятой)
cout << setw(6) << setprecision(2)
<< x << endl;
Те же манипуляторы (за исключением endl и ends могут использоваться и при вводе. В этом случае они описывают представление вводимых чисел. Кроме того, имеется манипулятор, работающий только при вводе, это ws. Данный манипулятор переключает вводимый поток в такой режим, при котором все пробелы (включая табуляцию, переводы строки, переводы каретки и переводы страницы) будут вводиться. По умолчанию эти символы воспринимаются как разделители между атрибутами ввода.
int x;
// ввести шестнадцатеричное число
cin >> hex >> x;