Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 1717 / 223 | Длительность: 24:14:00
Лекция 7:

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

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Аннотация: Рассматриваются конструкции cin и cout, и возможности их использования для организации форматированного ввода-вывода.

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

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

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

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. Некоторые флаги форматного вывода
Флаг Описание Пример использования1cout.width(n) устанавливает ширину поля вывода, подробнее об этом в п. 7.1.2 Результат
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 Вывод логических величин в текстовом виде (true, false)
bool a=true;
cout<<a<<endl;
cout. setf ( ios :: boolalpha);
cout<<a<<endl;
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 p=23;
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.

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?

Ольга Лобода
Ольга Лобода
Россия, ФГОУ ВПО Государственный университет - учебно-научно-производственный комплекс, 2010