Программирование >>  Операторы преобразования типа 

1 ... 191 192 193 [ 194 ] 195 196 197 ... 239


Вызов precisionO без аргументов возвращает текущую точность. При вызове с аргументом функция precisionO устанавливает заданную точность вывода и возвращает предыдущую точность. По умолчанию точность равна шести десятичным цифрам.

По умолчанию ни один из флагов ios::fixed и ios:.scientific не устанавливается. В этом случае запись выбирается в зависимости от выводимого значения. Для этого делается попытка вывести все значащие десятичные цифры (но не более precisionO) с удалением начального нуля перед десятичной точкой и/или всех завершающих пробелов, а в крайнем случае - даже десятичной точки. Если precisionO разрядов оказывается достаточно, испрльзуется десятичная запись; в противном случае - научная запись.

При помощи флага showpoint можно заставить поток данных выводить десятичную точку и завершающие нули до ширины precision() разрядов (табл. 13.25).

Таблица 13.25. Фпаг обязательного вывода десятичной точки

Флаг

Описание

showpoint

Десятичная точка всегда используется при выводе

Таблица 13.26 иллюстрирует довольно сложные взаимосвязи между флагами и точностью на примере двух конкретных чисел.

Таблица 13.26. Примеры форматирования вещественных чисел

precisionO

421.0

0.0123456789

Обычный формат

4.2е+02

0.012

0.0123457

С флагом showpoint

4.2е+02

0.012

421.000

0.0123457

С флагом fixed

421.00

0.01

421.000000

0.012346

С флагом scientific

4.21е+02

1.23е-02

4.210000е+02

1.234568е-02

Как и в случае целых значений, флаг ios::showpos служит для принудительного вывода знака положительных чисел. Флаг ios::uppercase указывает, какая буква должна использоваться в научной записи (Е или е).

Флаг ios::showpoint, тип записи и точность можно задать при помощи манипуляторов, представленных в табл. 13.27.

Например, расслютрим такую команду:

std::cout std::scientific std::showpoint std::setprec1sion(8) 0,123456789 Std::endl:



Таблица 13.27. Манипуляторы формата вывода вещественных чисел

Манипулятор

Описание

showpoint

Десятичная точка всегда используется при выводе (установка флага

ios::showpoint)

noshowpoint

Десятичная точка не обязательна при выводе (срос флага ios.:sliowpoint)

setprecisIon(val)

Выбор новой точности val

fixed

Использование десятичной записи

scientific

Использование научной записи

Эта команда выводит следующий результат: 1.234567899-01

Манипулятору setprecision() передается аргумент, поэтому для его использования необходимо включить в программу заголовочный файл <iomanip>.

Общие параметры форматирования

Список форматных флагов завершается флагами sidpws и unitbuf (табл. 13.28).

Таблица 13.28. Оставшиеся форматные флаги Флаг Описание

stcipws Автоматическое игнорирование начальных пропусков при чтении данных оператором >> unitbuf Принудительный вывод содержимого буфера после каждой операции записи

Флаг ios::sl<ipws устанавливается по умолчанию; это означает, что по умолчанию некоторые операции чтения игнорируют начальные пропуски. Обычно этот флаг удобнее держать установленным. Например, вам не придется специально заботиться о чтении пробелов, разделяющих числа. С другой стороны, это означает, что вы не сможете читать пробелы оператором >>, потому что начальные пропуски всегда игнорируются.

Флаг ios::unitbuf управляет буферизацией вывода. При установленном флаге ios::unitbuf вывод практически выполняется без буферизации - выходной буфер очищается после каждой операции записи. По умолчанию этот флаг не устанавливается. Исключение составляют потоки данных сегг и wcerr, для которых этот флаг устанавливается в исходном состоянии.

В табл. 13.29 представлены манипуляторы, используемые для управления дополнительными флагами.

Таблица 13.29. Манипуляторы для управления дополнительными форматными флагами Манипулятор Описание

skipws Автоматическое игнорированиеначальных пропусков при чтении данных

оператором >> (установка флага ios::skipws)



Интернационализация 601

Манипулятор Описание

noskipws Обработка начальных пропусков при чтении данных оператором

(сброс флага ios::skipws)

unitbuf Принудительный вывод содержимого буфера после каждой операции

записи (установка флага ios::unitbuf)

nounitbuf Отмена принудительного вывода содержимого буфера после каждой

операции записи (установка флага ios::unitbuf)

1нтернационализация

Форматы ввода-вывода также адаптируются к национальным стандартам. Функции, определенные для этой цели в классе ios base, перечислены в табл. 13.30.

Таблица 13.30. Функции интернационализации Функция Описание

imbue(loc) Назначение объекта локального контекста

getlocO Получение текущего объекта локального контекста

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

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

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

Таблица 13.31. Вспомогательные функции интернационализации Функция Описание

widen(c) Преобразование символа с типа char к кодировке, используемой потоком

narrow(c,def) Преобразование символа с из кодировки, используемой потоком, к типу

char (если такого символа не существует, возвращается def)



1 ... 191 192 193 [ 194 ] 195 196 197 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика