Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен по информатике.docx
Скачиваний:
25
Добавлен:
22.09.2019
Размер:
1.18 Mб
Скачать
  1. Потоковый ввод-вывод. Библиотека потокового ввода-вывода. Вступление.

к началу статьи Всем доброго времени суток. Если вы посмотрите на предыдущие статьи, то заметите что в них использовалась как С-шная система ввода/вывода, так и ввод/вывод С++. Они ни в чём не уступают друг другу по функциональности, хотя, на мой взгляд, последней пользоваться удобнее (например в силу того, что она объектно-ориентированная). В этой статье я попытаюсь убедить Вас в этом.

Консольный ввод/вывод.

к началу статьи Когда запускается программа на С++, автоматически создается несколько стандартных потоков – cin (стандартный ввод с клавиатуры), cout (стандартный вывод на экран). Есть еще 2 стандартных потока, но в данной статье мы их не будем рассматривать (cerr и clog – потоки для ошибок). Чтобы начать ими пользоваться нужно всего лишь подключить заголовочный файл iostream.h. Теперь можно рассмотреть простенький пример:

int i; cout<<"Input i : "; cin>>i; cout<<"i = "; cout<<i;

В нем мы просто вводим число, а затем выводим его на экран. Хочу обратить Ваше внимание на то, что потоки используют перегруженные операторы >> и <<, которые возвращают стандартный поток. Это приводит к одному интересному эффекту:

int i(1),j(2); cout<<i<<" "<<j;

Данная конструкция работает следующим образом: сначала бинарный оператор << применяется к cout и переменной i (тем самым осуществляется вывод i на экран), после чего возвращается временная копия потока. Теперь уже она инициирует второй вызов оператора <&lt. Тот же саамы принцип используется и в потоке ввода.

Форматирование.

к началу статьи Формат выводимых данных задается с помощью достаточно большого числа флагов, но мы остановимся на наиболее полезных. Да, чуть не забыл, флаги устанавливаются с помощью метода setf(fmtflags) и сбрасываются методом unsetf(fmtflags) (это методы потоковых классов). oct, dec, hex – вывод чисел в восьмеричной, десятеричной и шестнадцатеричной системах счисления соответственно. Рассмотрим предыдущий пример, слегка изменив его:

int i; cout<<"Input i : "; cin>>i; cout.setf( ios::oct ); cout<<"i = "<<i<<endl;

Теперь если Вы введете 8, то увидите на экране “i = 10”. uppercase – вывод символа е (при выводе чисел в научной нотации) и x (при выводе чисел в шестнадцатеричной системе счисления) в верхнем регистре. showpos – если установлен, то перед положительными числами в десятеричной системе счисления будет ставиться знак +. left, right – выравнивание. showpoint – появление десятичной точки и последующих нулей при выводе вещественных чисел. Например:

float i; cout<<"Input i : "; cin>>i; cout.setf( ios::showpoint ); cout<<"i = "<<i<<endl; getch();

showbase – вывод основания системы счисления. scientific, fixed – установка вывода чисел в научной нотации или с фиксированной точкой.

float i; cout<<"Input i : "; cin>>i; cout.setf( ios::scientific ); cout<<"i = "<<i<<endl; cout.setf( ios::fixed ); cout<<"i = "<<i<<endl;

boolalpha – булевые значения выводятся как true или false. Установку нескольких флагов можно объединить в один вызов setf():

cout.setf( ios::showbase | ios::showpos );

Так же для форматирования используются следующие методы потоков – width(), precision() и fill(). width() – задаёт число знаков отводимое под выводимое число. precision() – задает сколько знаков после запятой будет выводиться у вещественных чисел fill() – задает какими символами будут заполняться неиспользованные позиции в строке вывода. Сейчас рассмотрим пример, и все будет ясно как день:

cout.setf( ios::fixed ); cout.width( 10 ); cout.precision( 3 ); cout.fill( '%' ); cout.setf( ios::right ); cout<<12.3456<<endl; cout.width( 10 ); cout.precision( 3 ); cout.fill( '%' ); cout.setf( ios::left ); cout<<12.3456<<endl;

на экран выведется:

%%%%12.345 12.345%%%%