В этом уроке мы вернемся к используемым ранее операторам cin и cout для рассмотрения их в организации форматированного ввода-вывода. Для управления вводом-выводом в C++
используются :
- флаги форматированного ввода-вывода;
- манипуляторы форматирования.
Флаги позволяют установить параметры ввода-вывода, которые будут действовать во всех последующих операторах ввода-вывода до тех пор, пока не будут отменены. Манипуляторы вставляются в операторы cin(cout) и устанавливают параметры текущего оператора ввода-вывода.
Использование флагов
Флаги позволяют включить или выключить один из параметров вывода на экран. Для установки флага вывода используется следующая конструкция языка C++:
cout.setf(ios::flag)
Для снятия флага конструкция:
cout.unsetf(ios::flag)
Здесь flag — имя конкретного флага.
Если при выводе необходимо установить несколько флагов, то можно воспользоваться арифметической операцией «или» (|). В этом случае конструкция языка C++ будет такой:
cout.setf(ios::flag1 | ios::flag2 | ios::flag3)
В данном случае flag1, flag2, flag3 — имена устанавливаемых флагов вывода. В таблице ниже приведены некоторые флаги форматного вывода с примерами их использования.
Флаг | Описание | Пример использования | Результат |
right | Выравнивание по правой границе |
int r=—25;
cout.setf(ios::right); cout.width(15); cout<<«r=»<<r<<endl;
|
r=-25 |
left | Выравнивание по левой границе (по умолчанию) |
double r=—25.45;
cout.setf(ios::left); cout.width(50); cout<<«r=»<<r<<endl;
|
r=-25.45 |
boolalpha | Вывод логических величин в текстовом виде |
bool a=true;
cout<<a<<endl; cout.setf(ios::boolalpha); cout<<a<<endl;
|
1 true |
dec | Вывод величин в десятичной системе счисления (по умолчанию) |
int r=—25;
cout<<«r=»<<r<<endl;
|
r=-25 |
oct | Вывод величин в восьмеричной системе счисления (для этого нужно снять флаг вывод в десятичной) |
int p=23;
cout.unsetf(ios::dec); cout.setf(ios::oct); cout<<«p=»<<p<<endl;
|
p=27 |
hex | Вывод величин в шестнадцатеричной системе счисления (для этого нужно снять флаг вывод в десятичной) |
int p=23;
cout.unsetf(ios::dec); cout.setf(ios::hex); cout<<«p=»<<p<<endl;
|
p=17 |
showbase | Выводить индикатор основания системы счисления |
int r=—25;
cout.unsetf(ios::dec); cout.setf(ios::hex|ios::showbase); cout<<«p=»<<p<<endl;
|
p=0x17 |
uppercase | Использовать прописные буквы в шестнадцатеричных цифрах |
int p=29;
cout.unsetf(ios::dec); cout.setf(ios::hex|ios::uppercase); cout<<«p=»<<p<<endl;
|
p=1D |
showpos | Выводить знак + для положительных чисел |
int p=29;
cout.setf(ios::showpos); cout<<«p=»<<p<<endl;
|
p=+29 |
scientific | Экспоненциальная форма вывода вещественных чисел |
double p=146.673;
cout.setf(ios::scientific); cout<<«p=»<<p<<endl;
|
p=1.466730e+002 |
fixed | Фиксированная форма вывода вещественных чисел (по умолчанию) |
double p=146.673;
cout.setf(ios::fixed); cout<<«p=»<<p<<endl;
|
p=146.673 |
Флаги удобно использовать в тех случаях, когда следует изменить параметры всех последующих операторов ввода-вывода. Использование большего количества флагов для управления одним оператором ввода-вывода не совсем удобно. Еще одним способом форматирования является использование манипуляторов непосредственно в операторах cin и cout.
Использование манипуляторов форматирования
Манипуляторы встраиваются непосредственно в операторы ввода-вывода. С одним из них (endl) вы уже знакомы. В таблице ниже приведены основные манипуляторы форматирования с примерами. Для корректного их использования необходимо подключить библиотеку iomanip с помощью оператора #include <iomanip>
Манипулятор | Описание | Пример использования | Результат |
setw(n) | Определяет ширину поля вывода в n символов |
int r=—253;
cout.setf(ios::fixed); cout<<«r=»<<setw(10)<<r<<endl;
|
r=253 |
setprecision(n) | Определяет количество цифр (n-1) в дробной части числа |
double p=1234.6578;
cout.setf(ios::fixed); cout<<«p=»<<setw(15)<<setprecision(3)<<p<<endl;
|
p=1234.658 |
left | Выравнивание по левой границе (по умолчанию) |
int r=—25;
cout.width(15); cout<<«r=»<<setw(15)<<left<<r<<endl;
|
r=-25 |
right | Выравнивание по правой границе |
int r=—25;
cout.width(15); cout<<«r=»<<setw(15)<<right<<r<<endl;
|
r=-25 |
boolalpha | Вывод логических величин в текстовом виде |
bool a=true;
cout<<boolalpha<<a<<endl;
|
true |
noboolalpha | Вывод логических величин в числовом виде |
bool a=true;
cout<<noboolalpha<<a<<endl;
|
1 |
dec | Вывод величин в десятичной системе счисления (по умолчанию) |
int r=0253;
cout<<«r=»<<dec<<r<<endl;
|
r=171 |
oct | Вывод величин в восьмеричной системе счисления (для этого нужно снять флаг вывод в десятичной) |
int r=253;
cout<<«r=»<<oct<<r<<endl;
|
r=375 |
hex | Вывод величин в шестнадцатеричной системе счисления (для этого нужно снять флаг вывод в десятичной) |
int r=253;
cout<<«r=»<<hex<<r<<endl;
|
r=fd |
showbase | Выводить индикатор основания системы счисления |
int p=253;
cout<<«p=»<<hex<<uppercase<<showbase<<p<<endl;
|
p=0XFD |
noshowbase | Не выводить индикатор основания системы счисления |
int p=253;
cout<<«p=»<<hex<<nouppercase<<showbase<<p<<endl;
|
p=FD |
uppercase | Использовать прописные буквы в шестнадцатеричных цифрах |
int p=253;
cout<<«p=»<<hex<<uppercase<<p<<endl;
|
p=FD |
nouppercase | Использовать строчные буквы в шестнадцатеричных цифрах |
int p=253;
cout<<«p=»<<hex<<nouppercase<<p<<endl;
|
p=fd |
showpos | Выводить знак + для положительных чисел |
int p=29;
cout<<«p=»<<showpos<<p<<endl;
|
p=+29 |
noshowpos | Не выводить знак + для положительных чисел |
int p=29;
cout<<«p=»<<noshowpos<<p<<endl;
|
p=29 |
scientific | Экспоненциальная форма вывода вещественных чисел |
double p=146.673;
cout<<«p=»<<scientific<<p<<endl;
|
p=1.466730e+002 |
fixed | Фиксированная форма вывода вещественных чисел (по умолчанию) |
cout<<«p=»<<fixed<<p<<endl;
|
p=146.673 |
setfill(c) | Установить символ c как заполнитель |
cout<<«x=»<<right<<setw(10)<<setprecision(4)<<setfill(‘!’)<<(float) 1/7<<endl;
cout<<«x=»<<left<<setw(10)<<setprecision(4)<<setfill(‘!’)<<(float) 1/7<<endl;
|
x=!!!!0.1429 x=0.1429!!!! |
Другими способами управления шириной поля вывода с помощью операторов являются:
- cout.width(n) — устанавливает ширину поля вывода — n позиций;
- cout.presicion(m) — определяет m цифр в дробной части числа;
При использовании операторов cin и cout фактически происходит ввод-вывод в текстовый файл. При вводе текстовым файлом является клавиатура, а при выводе — экран дисплея. Cin и cout фактически являются именами потоков (о них мы поговорим в следующих уроках), которые отвечают за ввод и вывод в текстовый файл. Поэтому многие рассмотренные возможности форматированного ввода-вывода будут использоваться и при обработке текстовых файлов.