|
Программирование >> Операторы преобразования типа
Вызов precisionO без аргументов возвращает текущую точность. При вызове с аргументом функция precisionO устанавливает заданную точность вывода и возвращает предыдущую точность. По умолчанию точность равна шести десятичным цифрам. По умолчанию ни один из флагов ios::fixed и ios:.scientific не устанавливается. В этом случае запись выбирается в зависимости от выводимого значения. Для этого делается попытка вывести все значащие десятичные цифры (но не более precisionO) с удалением начального нуля перед десятичной точкой и/или всех завершающих пробелов, а в крайнем случае - даже десятичной точки. Если precisionO разрядов оказывается достаточно, испрльзуется десятичная запись; в противном случае - научная запись. При помощи флага showpoint можно заставить поток данных выводить десятичную точку и завершающие нули до ширины precision() разрядов (табл. 13.25). Таблица 13.25. Фпаг обязательного вывода десятичной точки Флаг Описание showpoint Десятичная точка всегда используется при выводе Таблица 13.26 иллюстрирует довольно сложные взаимосвязи между флагами и точностью на примере двух конкретных чисел. Таблица 13.26. Примеры форматирования вещественных чисел precisionO 421.0 0.0123456789
Как и в случае целых значений, флаг ios::showpos служит для принудительного вывода знака положительных чисел. Флаг ios::uppercase указывает, какая буква должна использоваться в научной записи (Е или е). Флаг ios::showpoint, тип записи и точность можно задать при помощи манипуляторов, представленных в табл. 13.27. Например, расслютрим такую команду: std::cout std::scientific std::showpoint std::setprec1sion(8) 0,123456789 Std::endl: Таблица 13.27. Манипуляторы формата вывода вещественных чисел
Эта команда выводит следующий результат: 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)
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |