Файл: Методичка C++ Форматированный ввод и вывод.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 14.05.2021

Просмотров: 182

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

​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=0×17

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.precision(m) — определяет цифр в дробной части числа;

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