Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.doc
Скачиваний:
55
Добавлен:
20.05.2015
Размер:
34.3 Кб
Скачать
  1. C++. Форматированный ввод-вывод

В этом уроке мы вернемся к используемым ранее операторам cin и cout для рассмотрения их в организации форматированного ввода-вывода. Для управления вводом-выводом в C++ используются :

  • флаги форматированного ввода-вывода;

  • манипуляторы форматирования.

Флаги позволяют установить параметры ввода-вывода, которые будут действовать во всех последующих операторах ввода-вывода до тех пор, пока не будут отменены. Манипуляторы вставляются в операторы cin(cout) и устанавливают параметры текущего оператора ввода-вывода.

      1. Использование флагов

Флаги позволяют включить или выключить один из параметров вывода на экран. Для установки флага вывода используется следующая конструкция языка 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.

      1. Использование манипуляторов форматирования

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