«

»

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, flag2flag3 — имена устанавливаемых флагов вывода. В таблице ниже приведены некоторые флаги форматного вывода с примерами их использования.

 

Флаг Описание Пример использования Результат
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) — определяет цифр в дробной части числа;

При использовании операторов cin и cout фактически происходит ввод-вывод в текстовый файл. При вводе текстовым файлом является клавиатура, а при выводе — экран дисплея. Cin и cout фактически являются именами потоков (о них мы поговорим в следующих уроках), которые отвечают за ввод и вывод в текстовый файл. Поэтому многие рассмотренные возможности форматированного ввода-вывода будут использоваться и при обработке текстовых файлов.

Добавить комментарий

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

Вы можете использовать эти теги HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Проверка на человечность *