8.2.4 Форматированный Вывод

8.2.4 Форматированный Вывод

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

char* oct(long, int=0); // восьмеричное представление char* dec(long, int=0); // десятичное представление char* hex(long, int=0); // шестнадцатиричное представление char* chr(int, int=0); // символ char* str(char*, int=0); // строка

Если не задано поле нулевой длины, то будет производится усечение или дополнение; иначе будет использоваться столко символов (ровно), сколько нужно. Например:

cout «« "dec(" «« x «« ") = oct(" «« oct(x,6) «« ") = hex(" «« hex(x,4) «« ")";

Если x==15, то в результате получится:

dec(15) = oct( 17) = hex( f);

Можно также использовать строку в общем формате:

char* form(char* format ...);

cout««form() эквивалентно применению стандартной функции вывода языка C printf()*. form() возвращает строку, получамую в результате преобразования и форматирования ее парамеров, которые стоят после первого управляющего параметра – строки формата format. Строка формата состоит из объектов двух типов: обычных символов, которые просто копируются в пток вывода, и спецификаций преобразования, каждая из которых влечет преобразование и печать следующего из параметров. Кадая спецификация преобразования начинается с символа %. Наример:

– * Объяснение того, как применяются строки формата, – это слегка отредактированный вариант спецификации printf(). (прим. автора)

cout«„form(«there were %d members present“,no_of_members);

Здесь %d указывает, что no_of_members должно рассматрваться как int и печататься в виде соответствующей последовтельности десятичных цифр. Если no_of_members==127, вывод бдет такой:

there were 127 members present

Множество спецификаций преобразования довольно велико и обеспечивает высокую степень гибкости. После % может стоять:

– необязательный знак минус, который задает выравнивание преобразованного значения влево в указанном поле;

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

. необязательная точка, для отделения ширины поля от

следующей строки цифр;

d необязательная строка цифр, специфицирующая точность, которая задает число цифр после десятичной точки для преобразований e и f или печатаемых символов для строки;

* в ширине поля или точности вместо строки цифр может стять *. В этом случае ширина поля и точность задается цлым параметром;

h необязательный символ h; указывает на то, что идущие за ним d, o, x или y соответствуют параметру короткое цлое;

l необязательный символ h; указывает на то, что идущие за ним d, o, x или y соответствуют параметру длинное целое;

% указывает, что должен быть напечатан символ %, никакие параметры при этом не затрагиваются;

c символ, указывающий, какой тип преобразования должен применяться. Символы преобразования и их значения таквы:

d целый параметр преобразуется в десятичную запись;

o целый параметр преобразуется в восьмеричную запись;

x целый параметр преобразуется в шестнадцатиричную запись;

f параметр float или double преобразуется в десятичную запись вида [-]ddd.ddd, где число, задаваемое цифрами d после десятичной точки, эквивалентно спецификации тоности для параметра. Если точность опущена, дается шесть цифр; если точность явно задана как 0, то не печатается десятичная точка и не печатается ни одной цифры;

e параметр float или double преобразуется в десятичную запись вида [-]d.ddde+dd, где перед десятичной точкой стоит одна цифра, а число, задаваемое цифрами после дсятичной точки, эквивалентно спецификации точности для параметра; когда точность опущена, выдается шесть цифр;

g параметр float или double печатается в том из видов d, f или e, который обеспечивает полную точность при минмальной затрате места;

c печатается символьный параметр, пустые символы игнорруются;

s параметр воспринимается как строка (указатель на сивол), и печатаются символы из строки до пустого символа или до тех пор, пока не будет достигнуто число символов, указанное спецификацией точности; но если точность равна нулю, печатаются все символы до пустого;

u беззнаковый целый параметр преобразуется в десятичную запись.

Несуществующая или недостаточная ширина поля никогда не приводит к обрезанию поля; дополнение поля записи имеет место только в том случае, если указанная ширина поля превышает фактическую ширину.

Вот более сложный пример:

char* src_file_name;

int line; char* line_format = « #line %d »%s" "; //... cout «„ „int a; “; cout «« form(line_format,line,src_file_name); cout «« «int b; “;

который печатает

int a;

#line 13 «С++/main.c» int b;

Применение form() небезопасно в смысле того, что не вполняется проверка типа. Вот, например, хорошо хорошо извесный способ получить непредсказуемый вывод и/или дамп (core dump):

char x; // ... cout«„form(«bad input char: %s“,x);

Правда, она дает большую гибкость в том виде, который хорошо знаком программистам на C. Потоковый вывод можно смшивать с выводом в стиле printf().

В настоящее время нет полностью удовлетворительных средств, обеспечивающих форматированный вывод типов, опредляемых пользователем* В частности, вероятно нужно будет найти стандартный способ передавать функции вывода для определяемго пользователем типа информацию, которая позволит ей опредлить пространственные ограничения, вид заполнения, левое или правое выравнивание и т.п. такими, какими они определяются в ее вызове. Вполне осуществимый, но не идеальный подход состит в том, чтобы снабжать определяемый пользователем тип фунциями, которые порождают соответствующее строковое предсталение объекта, для которого они вызываются, аналогично форматирующим функциям oct(), hex() и т.д. Например:

class complex (* float re,im; public: // ... char* string(char* format) (* return form(format,re,im); *) *); // ... cout «„ z.string(«(%.3f,%.3f)“);

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1.1.1 Вывод

Из книги C++ автора Хилл Мюррей

1.1.1 Вывод Прежде всего, давайте напишем программу, выводящую строку выдачи:#include «stream.h»main() (* cout «„ «Hello, world “; *)Строка #include «stream.h» сообщает компилятору, чтобы он включил стандартные возможности потока ввода и вывода, находящиеся в файле stream.h. Без этих описаний выражение cout


8.2 Вывод

Из книги Давайте создадим компилятор! автора Креншоу Джек

8.2 Вывод В этом разделе сначала обсуждаются средства форматного и бесформатного вывода встроенных типов, потом приводится стадартный способ спецификации действий вывода для определяемых пользователем


Ввод/Вывод

Из книги Криптоанархия, кибергосударства и пиратские утопии автора Ладлоу Питер


Вывод

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Вывод Криптоанархия — это международная угроза, распространение которой стимулируется развитием систем коммуникаций, в том числе телефонии и Интернета. Чтобы бороться с этой угрозой, необходим интернациональный подход к обеспечению безопасности международных


Вывод в файл

Из книги ArchiCAD. Начали! автора Орлов Андрей Александрович

Вывод в файл Вывод в файл целесообразно применять, если проект предназначен для публикации в Интернете, а также если для его просмотра предполагают использовать исключительно компьютер или устройство с возможностями воспроизведения видеофайлов (к примеру, мобильные


Вывод на диск

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

Вывод на диск Pinnacle Studio можно использовать для вывода проекта в формате VCD, S-VCD, DVD, HD-DVD и AVCHV (Blu-ray). При этом Studio может записать видео сразу на диск, экономя пользователю время на работу с утилитами записи дисков. Видеокурс Как выводить видео на диск, показывается в видеоуроке


Вывод на принтер

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Вывод на принтер С помощью команды File ? Print (Файл ? Печать) или комбинации клавиш Ctrl+P открывается окно настройки параметров распечатки документа (рис. 10.3). Рис. 10.3. Окно настройки параметров печатиВ данном окне расположены элементы управления печатью. Смысл их достаточно


Вывод текста

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Вывод текста Было бы странно, если канва не позволяла выводить произвольный текст. Существуют два метода и несколько свойств для вывода текста.Метод strokeText выводит заданный текст в указанное место. Текст рисуется в виде контура, без заливки; цвет контура задается


Вывод текста

Из книги Антимозг [Цифровые технологии и мозг] автора Шпитцер Манфред

Вывод текста Было бы странно, если канва не позволяла выводить произвольный текст. Существуют два метода и несколько свойств для вывода текста.Метод strokeText выводит заданный текст в указанное место. Текст рисуется в виде контура, без заливки; цвет контура задается


Ввод и вывод

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

Ввод и вывод Функции ввода и вывода в стандартной библиотеке Си позволяют читать данные из файлов или получать их с устройств ввода (например, с клавиатуры) и записывать данные в файлы, или выводить их на различные устройства (например, на принтер).Функции ввода/вывода


Вывод

Из книги автора

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


Вывод

Из книги автора

Вывод Компьютеры обрабатывают информацию. Люди, которые учатся — тоже. Из этого делается неверный вывод, что компьютеры — идеальные инструменты для обучения. Однако именно потому, что компьютеры, ноутбуки и смартборды делают умственную работу за нас, для обучения они не


Вывод

Из книги автора

Вывод Тот, кто хранит плоды своего умственного труда на цифровых носителях или на «облаке» в Интернете, наряду с уменьшением непосредственной нагрузки на головной мозг получает еще одну проблему. У этого человека полностью исчезает мотивация для запоминания новой


Вывод

Из книги автора

Вывод Виртуальные социальные сети удовлетворяют основную потребность человека, которая заключается в общении с окружающими нас людьми. Мы проводим много времени за разговорами и обсуждением всех известных нам людей, начиная с друзей и соседей и заканчивая сильными


Вывод

Из книги автора

Вывод Удивительно, как международные концерны снова и снова умудряются водить за нос целые поколения людей во многих странах мира. Создаются телепередачи и видеодиски, рекламируется их положительное воздействие на детей (почти всегда речь идет об обучении) и их успешно


Ввод и вывод

Из книги автора

Ввод и вывод Также мне кажется очень важным, чтобы мои результаты подпитывались соответствующим «вводом». Написание программного кода – творческая работа. Обычно мои творческие способности в наибольшей степени проявляются тогда, когда я сталкиваюсь с творческим