Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс ПЯВУ 2 сем / Лекции 2 сем / Л№34.Потоковый ввод / Лекция № 32.Потоковый ввод вывод.odt
Скачиваний:
11
Добавлен:
17.04.2015
Размер:
153.09 Кб
Скачать

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.