Читаем Освой самостоятельно С++ за 21 день. полностью

12:   char *phraseTwo = "Here's some values: ";

13:   char *phraseThree = " and also these: ";

14:   int у = 7, z = 35;

15:   long longVar = 98456;

16:   float floatVar = 8.8f;

17:

18:   printf("%s %d %d %s %ld %f\n",phraseTwo,y,z, phraseThree,longVar,floatVar);

19:

20:   char *phraseFour = "Formatted: ";

21:   printf("%s %5d %10d %10.5f\n",phraseFour,y,z,floatVar);

22:   return 0;

23: }

Результат:

hello world

Hello again!

5

Here's some values: 7 35 and also these: 98456 8.800000

Formatted: 7 35 8.800000

Анализ: Первый раз функция printf вызывается в строке 4 и имеет стандартную форму: за именем функции printf следует спецификатор преобразования (в данном случае %s) и константная строка в кавычках, выводимая на экран.

Спецификатор %s указывает, что в данный момент выводится текстовая' строка, указанная далее, — "hello world".

Второй вызов функции printf в строке 7 аналогичен первому, но в данном случае вместо константной строки, заключенной в кавычки, используется указатель типа char.

В третьем вызове printf в строке 10 используется спецификатор вывода целочисленного значения, хранимого в переменной x. Еще более сложным оказывается четвертый вариант вызова функции printf, показанный в строке 18. Здесь выводится сразу шесть значений. Каждому приведенному спецификатору отвечает свое значение, отделенное от остальных с помощью запятых.

Наконец, в строке 21 в уже хорошо известной вам функции printf используются спецификаторы форматирования, определяющие длину и точность выводимых значений. Многие считают, что форматирование вывода данных с помощью спецификаторов функции printf намного проще, чем с помощью манипуляторов объекта cout.

Ранее уже отмечались основные недостатки функции printf — отсутствие строгого контроля за типами данных и невозможность объявления этой функции как друга или метода класса. Поэтому при необходимости распечатать данные различных членов класса нужно использовать явно заданные методы доступа к членам класса.

Обобщение методов управления выводом данных в программах на C++

Для форматирования вывода данных в C++ можно использовать комбинации специальных символов, манипуляторов и флагов.

В выражениях с объектом cout используются следующие специальные символы:

\n — новая строка;

\r — возврат каретки;

\t — табуляция;

\\ — обратный слеш;

\ddd (число в восьмеричном коде) — символ ASCII;

\a — звуковой сигнал (звонок).

Пример выражения вывода строки:

cout "\aAn error occured\t"

Указанное выражение не только выводит сообщение об ошибке на экран компьютера. но подает предупреждающий звуковой сигнал и выполняет переход к следующей позиции табуляции. С оператором cout используются также манипуляторы. Однако для использования большинства манипуляторов нужно включить в программу файл iomanip.h. Далее вашему вниманию представлен список манипуляторов, не требующих включения iomanip.h:

flush — очищает буфер вывода;

endl — вставляет символ разрыва строки и очищает буфер вывода;

oct — устанавливает восьмеричное основание для выводимых чисел;

dec — устанавливает десятичное основание для выводимых чисел;

hex — устанавливает шестнадцатеричное основание для выводимых чисел.

А теперь приведем набор манипуляторов, для которых необходимо включение iomanip.h:

setbase (основание) — устанавливает основание для выводимых чисел (0 = десятичная, 8 = восьмеричная, 10 = десятичная, 16 = шестнадцатеричная);

setw (ширина) — устанавливает минимальную ширину поля вывода;

setfill (символ) — устанавливает символ заполнения незанятых позиций поля вывода;

setprecision (точность) — устанавливает число знаков после плавающей запятой; setiosflags (флаг) —устанавливает один или несколько флагов;

resetiosflags (флаг) — сбрасывает один или несколько флагов.

Например, в строке

cout setw(12) setfill ("#') hex x endl;

устанавливается ширина поля в 12 знаков, символ заполнения #, восьмеричное основание выводимых чисел, после чего выводится значение переменной x, добавляется символ разрыва строки и очищается буфер. Все манипуляторы, за исключением flush, endl и setw, остаются включенными на протяжении всей работы программы, если, конечно, не будут сделаны другие установки. Установка манипулятора setw отменяется сразу же после текущего вывода с объектом cout.

С манипуляторами setiosflags и resetiosflags могут использоваться следующие ювнфлаги:

iоs::left — выравнивает данные по левому краю поля вывода;

ios::right — выравнивает данные по правому краю поля вывода;

ios::interval — выравнивает данные по ширине поля вывода;

ios::dec — выводит данные в десятичном формате;

ios::oct — выводит данные в восьмеричном формате;

ios::hex — выводит данные в шестнадцатеричном формате;

ios::showbase — добавляет префикс 0x к шестнадцатеричным значениям и О к восьмеричным значениям;

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT