|
Программирование >> Разработка устойчивых систем
int ios::width() Возвращает текущую ширину поля (по умолчанию 0). Используется как при чтении, так и при записи в поток, int ios::width(int n) Задает ширину поля, возвращает предыдущее значение, int ios::fill() Возвращает текущий заполнитель (по умолчанию - пробел). int ios::fill(int n) Задает символ-заполнитель, возвращает предыдущее значение. int ios::precision() Возвращает текущую точность вещественных чисел (по умолчанию - 6). int ios::precision(int n) Задает точность вещественных чисел, возвращает предыдущее значение (см. ранее описание флагов группы ios::floatfield). Атрибуты fill и precision вполне понятны, а width стоит пояснить особо. Если значение этого атрибута равно О, то при записи значения в поток генерируется минимальное количество символов, необходимых для представления этого значения. Положительная ширина поля означает, что количество сгенерированных символов будет по крайней мере не меньше width; если оно содержит меньше символов, поле дополняется до необходимой ширины заполнителями fill. Тем не менее, выводимые значения никогда не усекаются, поэтому при попытке вывести 123 с шириной поля 2 все равно будет выведено число 123. Ширина поля определяет минимальное количество символов; задать максимальное количество символов невозможно. Ширина также отличается от других атрибутов тем, что она обнуляется при каждой операции чтения или записи, на которую она может повлиять. В действительности она является не переменной состояния, а скорее неявным аргументом операторов и . Если вы хотите, чтобы при работе с потоком использовалось постоянное значение ширины, вызывайте width () после каждой операции чтения или записи. Пример форматирования в потоках вывода Следующий пример, в котором задействованы все упоминавшиеся функции, поможет вам лучше понять, как они используются на практике: : С04:Format.срр Функции форматирования linclude <fstream> linclude <iostream> linclude ../require.h using namespace std: Idefine D(A) T A endl: A int mainO { ofstream T( format.out ): assured): D(int i = 47:) DCfloat f = 2300114.414159;) const char* s = Is there any more? : D(T.setf(ios::unitbuf):) D(T.setfCiOS::showbase):) D(T.setfdOS::uppercase ios::showpos);) D(T i endl:) По умолчанию используется десятичная система (dec) D(T.setf(ios::hex. ios::basefield):) D(T i endl:) D(T.setf(ios::oct. ios::basefield):) D(T i endl;) D(T.unsetf(ios::showbase):) D(T.setf(ios::dec. ios::basefield):) D(T.setf(ios::left. ios::adjustfield);) D(T.fillCO):) D(T fill char: T.fillO end!:) Dd.widthdO):) T i endl: D(T.setf(ios::right, ios::adjustfield):) Dd.widthdO):) T i end!: D(T.setf(ios: :intemal. ios: :adjustfield):) Dd.widthdO):) T i endl: D(T i end!:) Без widthdO) D(T.unsetf(ios::showpos):) D(T.setf(ios::showpoint):) D(T prec = T.precisionO end!:) D(T.setf(ios::scientific. ios::floatfield):) D(T endl f endl:) D(T.unsetf(ios::uppercase):) D(T endl f endl;) D(T.setf(ios::fixed. ios::floatfield);) D(T f endl:) D(T.precision(20):) D(T prec = T.precisionO end!:) D(T endl f endl:) D(T.setf(ios::scientific, ios::floatfield):) D(T endl f endl:) D(T.setf(i OS::fi xed, i os::f1oatfi eld):) D(T f endl:) Dd.widthdO):) T s endl: D(T.width(40):) T s endl: D(T.setf(ios::left. ios::adjustfield):) D(T.width(40):) T s endl: } III:- В данном примере создается трассировочный файл для анализа работы программы. Макрос D(a) средствами препроцессора преобразует а в отображаемую строку, после чего а выполняется как команда. Вся информация передается в трассировочный файл Т. Результат выглядит так: int i = 47: float f = 2300114.414159: T.setf(ios::unitbuf); T.setfdos: :showbase): Т.setfdOS::uppercase ios::showpos); T i endl: T.setf(ios::hex. ios::basefield): T i endl: 0X2F T.setf(ios::oct. ios::basefield): T i endl: T.unsetf(ios::showbase): T.setf(ios::dec. ios::basefield): T.setf(ios::left. ios::adjustfield): T.fillCO): T fill char: T.fillO endl: fill char: 0 T.widthdO): +470000000 T.setf(ios::right. ios: :adjustfield): T.widthdO): 0000000+47 T.setf(ios::internal. ios::adjustfield): T.widthdO): +000000047 T i endl: T.unsetf(ios::showpos): T.setf(i OS::showpoi nt): T prec = T.precisionO endl: prec = 6 T.setf(ios::scientific, ios::floatfield); T endl f endl: 2.300114E+06 T.unsetf(ios::uppercase): T endl f endl: 2.300114e+06 T.setf(ios::fixed, ios::floatfield): T f endl: 2300114.500000 T.precision(20): T prec = T.precisionO endl: prec = 20 T endl f endl: 2300114.50000000000000000000 T.setf(ios::scientific, ios::floatfield); T endl f endl: 2.30011450000000000000e+06 T.setf(ios;:fixed. ios::floatfield): T f endl: 2300114.50000000000000000000 T.widthdO): Is there any irore? T.width(40): OOOOOOOOOOOOOOOOOOOOOOIs there any рюге? T.setf(ios::left. ios::adjustfield):
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |