Void main ()
{ char name[] = "Строка длиной 52 символа "
"в поле шириной 58 позиций.";
cout << "\n\n";
cout.width(58); // Ширина поля вывода для потока cout.
// Символ заполнения пустых позиций поля:
cout.fill('$');
// Первый вывод строки в поток cout:
cout << name << endl;
cout.width(58); // Убрать нельзя.
// Заполнитель между знаком и значением:
cout.setf(ios::internal);
double dd = -33.4455;
cout << dd << endl; // Вывод вещественного значения.
cout.width(58); // Убрать нельзя.
// Смена выравнивания:
cout.setf(ios::left,ios::adjustfield);
// Символ заполнения пустых позиций поля:
cout.fill('#');
// Второй вывод строки в поток cout:
cout << name << endl;
long nn = 90000; // Шестнадцатеричное значение 0x15f90.
// Смена основания счисления:
cout.setf(ios::hex,ios::basefield);
// Выводить признак основания счисления:
cout.setf(ios::showbase);
// Переход на верхний регистр:
cout.setf(ios::uppercase);
cout.width(58); // Убрать нельзя.
cout << nn << endl; // Вывод целого значения типа long.
cout.width(58); // Убрать нельзя.
// Смена выравнивания:
cout.setf(ios::internal,ios::adjustfield);
// Символ заполнения пустых позиций поля:
cout.fill('$');
cout.unsetf(0x0200); // Переход на нижний регистр.
cout << nn << endl; // Вывод целого значения типа long.
}
Текст этой программы можно взять здесь.
Результат выполнения программы:
$$$$$$Строка длиной 52 символа в поле шириной 58 позиций.
-$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$33.4455
Строка длиной 52 символа в поле шириной 58 позиций.######
0X15F90##################################################
0x$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$15f90
Прокомментируем программу и результаты. По умолчанию ширина поля вывода устанавливается равной длине принятого представления выводимого значения. Поэтому действие функции width() однократное, и ее нужно при каждом выводе значения явно использовать, если умалчиваемое значение ширины поля вывода не устраивает программиста. Функция fill() устанавливает символ заполнения пустых позиций поля. При первом выводе строки name[] по умолчанию установлено выравнивание по правому краю поля, и символы '$' помещены слева от содержимого строки. Перед выводом значения вещественной переменной dd функцией setf() установлен флаг internal. Под его влиянием символ заполнения разместился между знаком '-' и числовым значением 33.4455. Ширина поля явно указана в 58 позиций.
Перед вторым выводом строки name[] "под влиянием" второго параметра (adjustfield) функции setf() сброшены флаги right и internal и явно установлен флаг left выравнивания по левому краю. Изменен символ заполнения пустых позиций '#'. Перед выводом длинного целого числа nn установлено основание системы счисления (basefield - сбрасывает флаги оснований счисления; hex - явно устанавливает шестнадцатеричное основание). Установлены флаги showbase и uppercase и ширина поля вывода.
Число 90000 выведено в шестнадцатеричном виде, признаком 0X обозначено основание системы счисления, для изображения шестнадцатеричных цифр и признака основания используются прописные буквы. Так как при переходе к выравниванию по левому краю флаг internal оказался сброшенным, то символ заполнения '#' размещен не после признака основания счисления 0X, а заполняет правую пустую часть поля. Заключительный вывод значения nn, равного 90000, выполнен с флагами internal и left. Для перехода на нижний регистр использована функция unsetf() с явным значением флага uppercase.