Г. Шилдт - Полный справочник по C++ (1109478), страница 36
Текст из файла (страница 36)
Числа, представленные е научном формате, выглядят так: Если буква Е должна быть выведена как прописная, слсдуст использовать спсцификагор ззж, а если как строчная — ззе. Функция резззсб() может сама выбирать представление числа с помощью спецификатора ъб илн гке, если вместо них указать спсцификаторы Ъд или жд. В этом случае функция сама определит, какой аид числа короче. Спсцификатор '~ позволяет вывести букву В как ПроПиенУю, а Ъд — как строчную. Следующая программа демонстрирует ээффскг примснсння спсцификатора жд. Часть (. Основы языка С++: подмножество С $1пс1пйе «вхйхо.)з> 1пе тахо(згозй) ( йоиЬ1е Гн хах(1=1.0з х<1.0е+10з х.=с*10) рхьпес("Ъд ", х); хехохп Оз ) В результате на экране появятся такис числа. $1 10 100 1000 10000 100000 1е+006 1е+Оот 1е+000 1е+009 Целые числа без знака можно выводить в восьмеричном и шсстнадцатсричзюм формате, используя спецификаторы ъо и жзх поскольку в шсспзадцатеричной системс счисления лля представления чисел от 1О до 15 используются буквы от А до Е, их можно выводить как прописными, так и строчными.
Если буквы лолжны быть прописными. следует применять спецификатор 'ах, а сели строчными — ъзг, как показано ниже. Вхпс1ойе <вхй1о )з> ьпх хазп(чоьй) ( ипв10пей пшаз гох(пот=Оз поп<255; пил>+) рххпсх("Ъо ", пша)з рхьпсх("Ъх ", пшп)з рхгпсх("ЪХ1п", поп); ) хесохп Оз ) Вывод адресов Если на экран необходимо вывести адрес, следует применять спецификатор жр. этот спецификатор формата заставляет функцию рхапев() выводить на экран адрес, формат которого совместим с типом адресации, принятой в компьютере. Следуюшая программа выводит на экран адрес перелгенной ваззвз1в. Вьпс1ийе <вхйзо.'и> ьпс вавзр1аз зпх па1п(ззоЫ) рххпсх("Ър", авапр1е)з хееохп Оз ) Спецификатор %п Спецификатор формата ззп отличается ото всех остальных.
Он заставляет функцию рх1пее() записывать в соответствуюшую переменную количество символов, узко вы- Глава 8. Ввод-вывод на консоль всдснных на экран. Спсцификатору лгп должен соответствовать цслочислснный указатель. После завершения Функции ртзпсд() этот указатсль будет ссылаться на персмснную, в которой содержится количество символов, вывсдснных до спсцификатора еп. Этот необычный спсцификатор иллюстрируется слсдуюшим примсром.
Вьпс1цс)е <всг)1о.)з> зпт палл(чолс)) ( 1пс рт(пст("Это%а проверка(а", асоцпс) ртспст(*ЬЙ", соцпс); тесцтп 0; Зта програмл)а выведет на экран строку "Зто проверка" н число 3. Спсцификатор тлп обычно используется для динамического форматирования. Модификаторы формата Многие спсцификаторы формата имеют свои модификаторы, которые немного изма)ниот их смысл, Например, с их помощью можно изменять минимальную ширину поля, количсство цифр после десятичной ~очки, а также выполнять выравнивание по лсвому краю.
Модификатор Формата указывается между символом процента и кодом Форма~а. Рассмотрим их подробнее. Модификатор минимальной ширины поля Полос число, размещенное между символом процента и кодом форма~а, задает гяииилшльную ширину поля, Если строка вывода короче, чем нужно, она дополняется пробелами, соли длиннсс, строка всс равно выводится полностью. Строку можно дополнять нс только пробелами, но и нулями. Для этого достаточно поставить 0 перел модификатором ширины поля. Например, спсцификатор чаво дополнит число, количество цифр которого мсньшс пяти, ведущими нулями, так что в результата оно будст состоять из пяти цифр.
Этот спсцификатор иллюстрируется слслующсй программой. Ззпс1цг)е <всс)зо.)з> 1пс па(п(чоЫ) ( с)оц)>1е заев) ссегл = 10.12304; ртспсс("ЪтЫ". 1сегл); ртзпсг("$1011п", ьсегл)у рт1птс("$0121(п". 1теп~]; тесцтп 0; ) Зта програл)ма выводит на экран слсдующис числа. 10.123040 10.123040 00010.123040 Часть (. Основы языка С++) подмножество С МодиФикатор минимальгюй ширины поля чаше всего используется лля Форматирования таблиц. Программа, приведенная ниже, создаст таблицу квадратов и кубов чисел от 1 ло 19. Вапс1цс)е <вЕЖо.)з> 1пс аза1п(ноЫ) ( 1те 1з тегцтп Оз В результате на экран будет выведена слелуюшая таблица. Модификатор точности Моди((зикаглор вгочмогтя указывается после модификатора ширины поля (если он есть).
Эгот модификатор состоит из точки, за которой следуе~ целое число. Точный смысл модификатора зависит от типа данных, к которым он применяется. Если модификатор точности примез|яется к числам с плавающей точкой с Форматами ъв, ъе или тзв, он означает количество десятичных цифр после ~очки. Например, спецификатор формата в10.46 означает, что на экран будет выведено число, состоящее нз десяти цифр, четыре из которых расположены после точки, Если модификатор применяешься к спецификаторам формата чп или тза.
оц запас~ количество значащих цифр. Если модификатор используется лля вывода строк, он задав~ максимальную ллину поля. Например, спецификатор ззв.тв означает, что на экран будет выведена с~рока, состоящая как минимум из пяти символов, длина которой не превышает семи. Если строка окажется длиннее, последние символы будут отброшены. Если модификатор точности применяется к целым типам, он залает минимальное количество цифр, нз которых должно состоять число. Если число состоит пз меньшего количества цифр, оно дополняешься ведущими нулями. Глава 8. Ввод-вывод иа консоль 1 2 3 4 5 б 7 8 9 10 11 12 13 14 15 16 17 18 19 У* выводит таблицу квадратов н кубов от 1 до 19 бог(1=1з 1<20; 1++) ртзпсб("$8с) $8<) %вата". з., з*1, з."1<1)з 1 1 4 8 9 27 16 64 25 125 36 216 49 343 64 512 81 729 100 1000 121 1331 144 1728 169 2197 196 2744 225 3375 256 4096 289 4913 324 5832 361 6859 Рассмотрим демонстрационную программу.
Взпс1иое <вес()о.)г гпс иатп(чоЫ) рх'Епеб('*В.411п", )23.1234587]; рг(пСЕ(583.8с)тп", 1000); рг1псб("810. 15в1п", "Зто простая проверка. ); гесигп 0; Эта программа выводит на экран слсдуюгцис результаты. т 123.1235 00001000 Зтс простая про Выравнивание вывода По умолчанию вывод выравнивается по правому краю. Иначе говоря, если ширина поля больше, чем выводимые данш)с, результаты "прижимаются" к правому краю. Вывод можно выровнять по лсвому краю, поставив перед символом ъ знак "минус".
Нанрныср, СПСцИФИКатОр Зь-10.2Е ВЫраяинааст ЧИСЛО С дВуМя ЗнаКаМН ПОСЛЕ ТОЧКИ по левому краю поля, состояшсго из 1О позиций. Рассмотрим пример, ЬЕпс1ис)е <вец)с. Ьь Егс к)а1п(чей) ( рхспсб("вьтзавнивание пс правому крапы Ввг)1п", 100); ргьпсб('Выравнивание пс левому кряки В-БЮп*', )00) тесигп 0; ) Обработка данных других типов Для вывода значений персмепнык типа в)гоке Епс и 1опд епе функция ркепее() использует два модификатора, которые можно применять к специфика- торам д, з., о, и и х. Модификатор 1 (буква "'зль") позволяет выяод)ить значения типа 1опд Епс.
Например, спсцифнкатор тз10 означает, по на экран будет выведено значение типа 1опд Епе. Для вывода значения типа в)тоти Епс ИСПОЛЬЗУется модификатор Еь Например, спецификатор пни означает, что на экран будет выведено значение типа в?юге ипвддпед Епс. МодиФикаторы 1 и )г можно также применять к спсцифнкатору и. В этом случае соответствующий указатель должен иметь тип 1опд Епе* или в)ютс Епс*. Если компилятор гюлностью поддерживает стандарт языка С++, модификатор 1 можно применять к спецификатору с.
В этом случае он задает рас(цирснный символ. Аналогично, если модификатор 1 стоит перед спсцифнкатором в, на экран выводится строка расширенных символов. Модификатор ь можно использовать как префикс перед спецификаторами е, е и д. Он озна )аст, что на экран выводится значение типа 1опд г)ои)ззе. Часть 1.
Основы языка С++: подмножество С Модификаторы ' и Ф Функция рх1псд() имеет сшс лва лголиг)я!катара: * и $ Если перел спсцификаторами и, ц„д. в или е стоит молификатор (), это означает, что число булет содержать десятичную точку, лажс осли оио цс имсст дробной части. Если этот модификатор стоит пород спсцификагорами и или х, шестнадцатеричные числа выводятся с прсфиксом ох. Если жс символ () указав псрсд спецификатором о, число булст лополиспо ведущими нулями. К другим спецификаторам модификатор (( применять нельзя. Ширину пояя и точность прслставлсиия числа можно задавать ис только константами, по и переменными.