Листинг 16.10. Использование функции put()



1: // Листинг 16.10. Использование put()

2: #include <iostream.h>

3:

4: int main()

5: {

6: cout.put('H' ).put('e' ).put('l').put('l').put('o').put('\n');

7: return 0;

8: }

 

Результат:

Hello

 

Примечание: При запуске этой программы некоторые компиляторы не выведут заданное слово Hello. Если эта проблема коснется и вас, просто пропустите этот листинг и идите дальше.

 

Анализ: Строку 6 можно представить следующим образом: функция cout.put('H') выводит букву H на экран и возвращает объект cout. Оставшуюся часть выражения можно представить следующим образом:

cout.put('e').put('l').put('l').put('o').put('\n');

Выводится буква e, после чего остается cout.put('l'). Таким образом, повторяется цикл, на каждом этапе которого выводится следующая бука и возвращается объект cout. После вывода последнего символа ('\n') выполнение функции завершается.

Функция write() работает так же, как и оператор ввода (<<), но она принимает параметр, указывающий максимальное количество выводимых символов. Использование этой функции показано в листинге 16.11.

Листинг 16.11. Использование функции write()

1: // Листинг 16.11. Использование write()

2: #include <iostream.h>

3: #include <string.h>

4:

5: int main()

6: {

7: char One[] = "One if by land";

8:

9:

10:

11: int fullLength = strlen(One)

12: int tooShort = fullLength -4;

13: int tooLong = fullLength +6;

14:

15: cout.write(One,fullLength) << "\n";

16: cout.write(One,tooShort) << "\n";

17: cout.write(One,tooLong) << "\n";

18: return 0;

19: }

 

Результат:

One if by land

One if by

One if by land i?!

 

Примечание: На вашем компьютере последняя строка вывода может выглядеть иначе.

 

Анализ: В строке 7 создается массив символов для заданной строки текста. Длина введенного текста присваивается в строке 11 целочисленной переменной fullLength. Установленное значение переменной tooShort меньше этой длины на четыре единицы, а значение переменной tooLong больше на шесть.

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

Строкой 16 вновь выводится строка, однако длина ее на четыре символа меньше, что и отражается в выводе.

Еще один вывод данных выполняется в строке 17, однако в этом случае функция write() выводит на шесть символов больше. После заданной строки на экране появятся символы, расположенные в ячейках памяти, следующих за ячейками массива символов.

 

Манипуляторы, флаги и команды форматирования

 

Поток вывода поддерживает установку большого количества флагов состояния, определяющих основание чисел (десятичное или шестнадцатеричное), ширину полей вывода и символы, используемые для заполнения полей. Флаг состояния представляет собой байт информации, каждый бит которого имеет специальное предназначение. Установка двоичных флагов более детально рассматривается на занятии 21. Для установки флагов потока ostream можно использовать функции-члены и манипуляторы.

Использование функции cout.width()

 

По умолчанию ширина поля вывода автоматически устанавливается такой, чтобы точно вместить все символы строки из буфера вывода. Но с помощью функции width() можно установить точное значение ширины поля вывода. Эта функция вызывается как метод объекта cout, поскольку является его функцией-членом. Функция width() изменяет ширину только следующего поля вывода. Использование этой функции проиллюстрировано в листинге 16.12.

Листинг 16.12. Настройка ширины поля вывода

1: // Листинг 16.12. Настройка ширины поля вывода

2: #include <iostream.h>

3:

4: int main()

5: {

6: cout << "Start >";

7: cout.width(25);

8: cout << 123 << "< End\n";

9:

10: cout << "Start >";

11: cout.width(25);

12: cout << 123 << "< Next >";

13: cout << 456 << "< End\n";

14:

15: cout << "Start >";

16: cout.width(4);

17: cout << 123456 << "< End\n";

18:

19: return 0:

20: }

Результат:

Start > 123< End

Start > 123< Next >456< End

Start >123456< End

Анализ: Сначала (строки 6—8) число 123 выводится в поле шириной в 25 символов. Ширина поля задается в строке 7. Результат этого форматирования показан в первой строке вывода.

Во второй строке вывода значение 123 распечатывается опять же в поле шириной 25, а затем сразу же выводится значение 456. Как видите, установка ширины поля применяется только первый раз, а для второго выражения с объектом cout уже не действует. Таким образом, установки функции width() применяются только к следующему выражению вывода данных.

В последней строке вывода видно, что установка ширины поля меньшей размера заносимого в него значения игнорируется программой. В этом случае ширина поля устанавливается равной размерам выводимых данных.

 


Дата добавления: 2019-02-12; просмотров: 211; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!