Программирование >>  Расширенная версия языка c++ 

1 ... 77 78 79 [ 80 ] 81 82 83 ... 227


cout.setf(ios::showbase I ios::hex)


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

написать ios::showbase.

Дополнением setfQ является функции tf(). Эта функция-член класса ios сбрасывает один или несколько флагов формата. Здесь показана ее основная форма:

void unsetf tfmtf lags ф.ла1ги)

Флаги, заданные параметром флаги, сбрасываются. (Все остальные флаги остаются без изменений.)

Когда-нибудь вам понадобится только узнать текущее состояние флагов и при этом ничего не менять. Поскольку функции setf() и iinsetf() меняют состояние одного или более флагов, в класс ios включена функция-член flags(), которая просто возвращает текущее состояние флагов формата. Здесь показан прототип этой функции:

fmtflags flags С) ; ; . . -- . . > ire .

Функция flags() имеет и вторую которая позволяет установить

связанные с потоком ввода/вывода, флаги формата. Флаги задаются в аргументе функции flagsQ. Здесь показан прототип этой версии функции:

fmtflags flags {fmtflags t) ;

мости. Запомните, флаг showpos - это перечислимая константа внутри класса ios. Следовательно, чтобы сообщить компилятору об этом, необходимо поставить перед флагом showpos имя класса и оператор расширения области видимости. Если этого не сделать, константа showpos просто не будет распознана компилятором.

Важно понимать, что функция является членом класса ios и влияет на созданные этим классом потоки ввода/вывода. Поэтому любой вызов функции setf() делается относительно конкретного потока. Нельзя вызвать функцию setfO саму по себе. Другими словами, в С++ нет понятия глобального

состояния формата. Каждый поток ввода/вывода поддерживает собственную информацию о состоянии формата.

Вместо повторных вызовов функции в одном вызове можно устано-

вить сразу несколько флагов. Для объединения необходимых флагов используйте оператор OR. Например, в следующем вызове функции setf() для потока cout устанавливаются флаги showbase и hex;



1. В этом примере показано, как установить несколько флагов формата.

♦include <iostream> ... ., ,. ,.j i,:

using namespace std; .,..; ... ..

int mainO . . . -

вывод с использованием установок по умолчанию

cout 123.23 привет 100 ч<. \п ; :.-

cout 10 -10 \п;

cout 100.0 \п;

/ / теперь меняем формат

cout.unsetl(ios::dec); требуется не для всех компиляторов cout.setf(ios::hex \ ios::scientific);

cout 123.23 привет 100 \n;

cout.aetf(ios::showpos);

cou< 1 -10 \n;

cout.setf(ios::showpoint \ ios::fixed);

cout 100.0; . :

return 0; - -i ...o- .

После выполнения программы на экран выводится следующее:

123.23 привет 100

10 -10

1.232300е+02 привет 64 a fffffff6

+100.000000

Обратите внимание, что фла wpos влияет только на вывод десятичных значений. Он не влияет на число 10, когда оно выводится в {пестнадцатерич-ной системе счисления. Кроме того, отметьте, что вызов функции unsetf() приводит к сбросу установленного по умолчанию флага dec. Этот вызов нужен не для всех компиляторов, а только для некоторых, для которых уста-

При использовании этой версии функции flags() битовый шаблон /копируется в переменную для хранения связанных с потоком флагов формата; при этом перезаписывается весь предшествующий набор флагов. Функция возвращает предыдущие установки флагов формата.



248 Самоучитель-С++

флага dec автоматически приводит к сбросу остальных флагов. Поэтому после сброса флага dec необходимо заново установить флаг hex или oct. Как правило, для лучшей переносимости программ лучше установить только то основание системы счисления, которое вы будете использовать и стереть остальные.

2. В следующей программе показано действие флага uppercase. В первую очередь устанавливаются флаги uppercase, showbase и hex. Затем выводится число 88 цатеричной системе счисления. В этом случае символ шестнадцатеричной системы счисления X выводится в верхнем регистре. Далее с помощью функции unsetf() сбрасывается флаг uppercase и снова выводится шестнадцатеричное число 88. Теперь символ х оказывается в нижнем регистре.

ttinclude <iostream> .

using namespace std;

intmain I ) . h

cout.unsetf(ios::dec);

cout .setfiios::uppercase showbase ios::hex);

cou 88 \n; - .

cout.unsetf (ios::uppercase) ; -

cout

return 0;

3. В программе для вывода состояния флагов формата потока cout используется функция flagsQ. Обратите особое внимание на функцию showflagsO- Она может вам пригодиться при разработке собственных программ.

#include <iostream> ; -г j-.<.>, -г.....

using namespace std; -

void showflags() ;

int main ( ) {

отображение состояния флагов формата по умолчанию showflags (); ,

cout. 3etf( ios: : oct showbase I ios:: fixed);

ShowflagsO; :

return 0; p. - i . . - , - ! ;



1 ... 77 78 79 [ 80 ] 81 82 83 ... 227

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