Форматированный ввод-вывод в C++

В этом уроке мы вернемся к используемым ранее операторам 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 фактически являются именами потоков (о них мы поговорим в следующих уроках), которые отвечают за ввод и вывод в текстовый файл. Поэтому многие рассмотренные возможности форматированного ввода-вывода будут использоваться и при обработке текстовых файлов.


Похожие записи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля отмечены *