Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C2013.pdf
Скачиваний:
506
Добавлен:
03.03.2016
Размер:
7.63 Mб
Скачать

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

234

7. Организация ввода-вывода в C++

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

Вэтом параграфе мы вернемся к рассмотренным ранее операторам ввода-вывода cin и cout, и рассмотрим возможности их использования для организации формати-

рованного ввода-вывода.

Для управления вводом-выводом в C++ используются:

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

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

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

щего оператора ввода-вывода.

7.1.1Использование флагов форматного ввода-вывода

Флаги позволяют включить или выключить один из параметров вывода на экран.

Для установки флага вывода используется следующая конструкция языка C++. cout.setf(ios::flag)

Для снятия флага используется конструкция cout.unsetf(ios::flag)

Здесь flag – имя конкретного флага.

Если при выводе необходимо установить несколько флагов, то можно воспользоваться арифметической операцией «или» (|). В этом случае конструкция языка C++ бу-

дет такой.

cout.setf(ios::flag1|ios::flag2| ios::flag3)

В данном случае flag1, flag2, flag3 – имена устанавливаемых флагов выво-

да.

В таблице 7.1 приведены некоторые флаги форматного вывода с примерами их использования.

Таблица 7.1. Некоторые флаги форматного вывода

Флаг

Описание

Пример использования42

Результат

right

Выравнивание

int r=-25;

 

 

по правой гра-

cout.setf(ios::right);

 

 

нице

cout.width(15);

r=-25

 

 

cout<<"r="<<r<<endl;

left

Выравнивание

double r=-25.45;

 

 

по левой гра-

cout.setf(ios::left);

 

 

нице (по умол-

cout.width(50);

r=-25.45

 

чанию)

cout<<"r="<<r<<endl;

boolalpha

Вывод логиче-

bool a=true;

1

 

ских величин в

cout<<a<<endl;

 

текстовом виде

cout.setf(ios::boolalpha);

true

 

(true, false)

cout<<a<<endl;

42 cout.width(n) устанавливает ширину поля вывода, подробнее об этом в п.8.1.2

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

235

 

 

 

 

Флаг

Описание

Пример использования

Результат

 

 

 

 

 

 

 

 

dec

Вывод

 

 

ве-

int r=-25;

r=-25

 

 

личин в деся-

cout<<"r="<<r<<endl;

 

 

тичной

систе-

 

 

 

 

ме

счисления

 

 

 

 

(по

 

умолча-

 

 

 

 

нию)

 

 

 

 

 

 

oct

Вывод

 

 

ве-

int p=23;

 

 

 

личин

в

 

вось-

cout.unsetf(ios::dec);

 

 

 

меричной

си-

cout.setf(ios::oct);

p=27

 

 

стеме

счисле-

cout<<"p="<<p<<endl;

 

 

ния (для этого

 

 

 

 

надо

 

 

снять

 

 

 

 

флаг

вывод в

 

 

 

 

десятичной)

 

 

 

hex

Вывод

 

 

ве-

int p=23;

 

 

 

личин в шест-

cout.unsetf(ios::dec);

 

 

 

надцатеричной

cout.setf(ios::hex);

p=17

 

 

системе

 

счис-

cout<<"p="<<p<<endl;

 

 

ления (для это-

 

 

 

 

го надо

снять

 

 

 

 

флаг

вывод в

 

 

 

 

десятичной)

 

 

 

showbase

Выводить

ин-

int p=23;

 

 

 

дикатор

осно-

cout.unsetf(ios::dec);

 

 

 

вания системы

cout.setf(ios::hex|ios::

 

 

 

счисления

showbase);

p=0x17

 

 

 

 

 

 

 

cout<<"p="<<p<<endl;

 

uppercase

Использовать

int p=29;

 

 

 

прописные

cout.unsetf(ios::dec);

 

 

 

буквы в шест-

cout.setf(ios::hex|ios::

 

 

 

надцатерич-

uppercase);

p=1D

 

 

ных цифрах

cout<<"p="<<p<<endl;

 

showpos

Выводить знак

int p=29;

 

 

 

«+»

для

поло-

cout.setf(ios::showpos);

p=+29

 

 

жительных чи-

cout<<"p="<<p<<endl;

 

 

сел

 

 

 

 

 

 

 

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);

p=146.673

 

вода

 

 

веще-

cout<<"p="<<p<<endl;

 

ственных

 

чи-

 

 

 

 

сел

(по

умол-

 

 

 

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

236

 

 

 

 

Флаг

Описание

Пример использования

Результат

 

 

 

 

 

 

чанию)

 

 

 

 

 

 

 

 

Флаги удобно использовать в тех случаях, когда следует изменить параметры всех последующих операторов ввода-вывода. Использование большого количества флагов для управления одним или несколькими операторами ввода-вывода не совсем удобно, потом все установленные придется отключать.

Еще одним способом форматирования является использование манипуляторов непосредственно в операторах cin и cout.

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

Манипуляторы встраиваются непосредственно в операторы ввода-вывода. C одним из манипуляторов (endl) читатель уже встречался, начиная с первой главы книги.

В таблице 7.2 приведены основные манипуляторы форматирования с примерами их использования. Для корректного использования всех манипуляторов необходимо подключить библиотеку iomanip с помощью оператора

#include <iomanip>

Таблица 7.2. Некоторые манипуляторы форматирования

Манипулятор

 

Описание

Пример использования

Результат

 

 

 

 

 

 

примера

 

 

 

 

 

setw(n)

Определяет

int r=253;

 

 

 

ширину

поля

cout.setf(ios::fixed);

r=

253

 

вывода

в

n

cout<<"r="<<setw(8)<<r<<endl;

 

 

 

символов

 

 

 

 

 

setprecision(n)

Определяет

double h=1234.6578;

 

 

 

количество

 

cout.setf(ios::fixed);

 

 

 

цифр (n-1) в

cout<<setprecision(3);cout<<"h="<<setw(15);

h=1234.658

 

дробной части

cout<<<<h<<endl;

 

 

 

числа

 

 

 

 

 

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

p=fd

 

 

тиричную

си-

 

 

 

 

стему

 

 

 

 

 

right

Выравнивание

int r=-25;

 

 

 

по правой гра-

cout.width(15);

 

r=-25

 

нице

 

 

cout<<"r="<<setw(15)<<right;

 

 

 

 

cout<<<<r<<endl;

 

 

 

 

 

 

 

 

 

left

Выравнивание

int r=-25;

 

 

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

237

 

 

 

 

Манипулятор

Описание

Пример использования

Результат

 

 

 

 

 

 

примера

 

 

по

левой гра-

cout.width(15);

r=-25

 

 

нице

 

(по

cout<<"r="<<setw(15)<<left;

 

 

умолчанию)

cout<<<<r<<endl;43

 

 

 

 

 

 

 

 

 

 

 

boolalpha

Вывод логиче-

bool a=true;

 

 

 

ских

 

величин

cout<<boolalpha<<a<<endl;

true

 

 

в

текстовом

 

 

 

 

виде

 

(true,

 

 

 

 

false)

 

 

 

noboolalpha

Вывод логиче-

bool a=true;

 

 

 

ских

 

величин

cout<<noboolalpha<<a<<endl;

1

 

 

в

 

числовом

 

 

 

 

виде (1, 0)

 

 

 

showpos

Выводить

int p=29;

 

 

 

знак «+» для

cout<<"p="<<showpos<<p<<endl;

p=+29

 

 

положитель-

 

 

 

 

ных чисел

 

 

 

noshowpos

Не

 

выводить

int p=29;

 

 

 

знак

 

«+» для

cout<<"p="<<noshowpos;

p=29

 

 

положитель-

cout<<<<p<<endl;

 

 

 

 

 

 

ных чисел

 

 

 

 

 

 

 

 

uppercase

Использовать

int p=253;

 

 

 

прописные

cout<<"p="<<hex<<uppercase;

 

 

 

буквы в шест-

cout<<<<p<<endl;

p=FD

 

 

надцатерич-

 

 

 

 

ных цифрах

 

 

 

nouppercase

Использовать

int p=253;

 

 

 

строчные бук-

cout<<"p="<<hex<<nouppercase;

 

 

 

вы

в

шестна-

cout<<<<p<<endl;

p=fd

 

 

дцатеричных

 

 

 

 

цифрах

 

 

 

showbase

Выводить ин-

int p=253;

 

 

 

дикатор осно-

cout<<"p="<<hex<<uppercase

 

 

 

вания

систе-

<<showbase<<p<<endl;

p=0XFD

 

 

мы счисления

 

 

 

noshowbase

Не

 

выводить

int p=253;

 

 

 

индикатор

cout<<"p="<<hex<<uppercase;

 

 

 

основания си-

cout<<<<noshowbase<<p<<endl;

p=FD

 

 

стемы счисле-

 

 

 

 

ния

 

 

 

 

 

 

showpos

Выводить

int p=29;

 

 

 

знак

 

«+» для

cout.setf(ios::showpos);

p=+29

 

 

положитель-

cout<<"p="<<p<<endl;

 

 

 

 

 

 

 

 

 

 

 

 

 

43 Еще один пример приведен при использовании манипулятора setfill

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]