Форматированный вывод на экран. форматированный ввод с клавиатуры

Для организации ввода-вывода в Си++ можно использовать средства языка Си (conio. h). Однако в Си++ существует стандартная библиотека классов, ориентированная на организацию потокового ввода-вывода. Классы ввода-вывода образуют иерархию по принципу наследования. Базовым в этой иерархии является класс io s (исключение составляют лишь классы буферизированных потоков). В классе ios объединены базовые данные и методы для ввода-вывода. Прямыми потомками класса ios являются классы istream и ostream. Класс istream — это класс входных потоков; ostream — класс выходных потоков. Потомком этих двух классов является iostream — класс двунаправленных потоков ввода-вывода. С этим классом мы уже много раз имели дело, подключая его к программам с помощью головного файла iostream.h .Объект cout принадлежит к классу ostream и представляет собой поток вывода, связанный с дисплеем. Объект cin принадлежит классу istream и является потоком ввода, связанным с клавиатурой. Оба эти объекта наследуются классом iostream. Знак << обозначает перегруженную операцию вставки символов в поток вывода cout , a >> — знак операции извлечения из потока ввода cin. Для организации форматированного потокового ввода-вывода в Си++ существуют два средства:

• применение функций-членов класса ios для управления фла­гами форматирования;

• применение функций-манипуляторов.

18. Потоковый ввод – вывод в C++

Библиотека потоков C++ предоставляет набор классов для управления вводом-выводом. Непосредственно в язык C++ (как и в язык Си) средства ввода-вывода не входят. В программах часто используется препроцессорная директива

#include <iostream.h>

Назначение указанного в директиве заголовочного файла — связать компилируемую программу с одной из основных частей библиотеки ввода-вывода, построенной на основе механизма классов. Эта библиотека почти стандартная, так как включена практически во все компиляторы C++. Однако о стандарте здесь можно говорить только неформально: библиотека создана после появления языка. Она разрабатывалась в некотором смыс­ле независимо от создания языка, не входит в формальное опи­сание языка и написана на языке C++.

Потоки ввода-вывода

Библиотека обеспечивает программиста механизмами для извлечения данных из потоков и для помещения данных в пото­ки. Каждый поток (за исключением строковых) ассоциируется при помощи операционной системы с определенным внешним устройством. При обмене с потоком используется вспомогатель­ный участок памяти, называемый буфером потока. При вводе данных они сначала помещаются в буфер и только затем переда­ются выполняемой программе. При выводе — данные заполня­ют буфер перед передачей внешнему устройству. Заполнение и очистку буферов операционная система выполняет без явного участия программиста, поэтому поток в прикладной программе можно рассматривать как последовательность байтов, не зави­сящую от конкретных устройств, с которыми ведется обмен данными.

Все потоки библиотеки последовательные, т.е. в каждый момент для потока определены позиции записи и (или) чтения, которые после обмена перемещаются по потоку на длину пере­данной порции данных.

В зависимости от реализуемого направления передачи дан­ных потоки делят на три группы:

· входные, из которых читается информация;

· выходные, в которые вводятся данные;

· двунаправленные, допускающие как чтение, так и запись.

В соответствии с особенностями обслуживаемого устройст­ва потоки принято делить на следующие группы:

· стандартные, для передачи данных от клавиатуры и к дис­плею (во всех предыдущих программах использовались по­токи данной группы);

· файловые, при размещении данных на внешнем носителе (например, диск, магнитная лента);

· строковые, позволяющие размещать данные потока в памяти (символьный массив или строка) и пользоваться при этом всеми средствами, предоставляемыми библиотекой потоков (например, форматный ввод-вывод данных).

Условный оператор

Оператор if используется для того, чтобы определить действия программы при различных условиях. Например у нас есть число. И если оно четное нам нужно его удвоить, а иначе разделить пополам. Для написания подобной программы и используется оператор if.

В самой простой вариации он будет иметь следующую форму

?

if(<условие>) <действие>;

В этом случае если условие выполняется , то программа совершит некоторое действие. Например:

?

if(a == 2) cout << a;

Здесь мы видим, что если некоторая переменная a станет равной 2, то программа её выведет. Для сравнения числа с 2 мы используем двойное равно ==. В С++ двойное равно == используется для любых сравнительных операций. А чтобы проверить переменную на неравенство какому-либо числу надо написать !=.

?

if(a != 2) cout << a;

В таком варианте программа выведет a, только если a не равно 2.


Теперь поговорим о более сложных вариациях оператора if.

Что если мы захотим при невыполнении основного условия сделать что-нибудь другое? Для этого используется структура if() ; else ;

Например:

?

if(a == 2) cout << a; else cout << 0;

Здесь, если число равно 2, то программа его выведет, а иначе выведет 0.

А что если при невыполнении первого условия нам нужно проверять еще что-то? Приведем пример из жизни. Если на улице солнечно то мы можем одеть футболку. А если нет? То мы еще должны посмотреть на улице просто пасмурно, или идет дождь, или может даже снег. Для подобных ситуаций в программировании мы можем использовать структуру
if() ; else if() ; else ;


?

if(a > 100) cout << 3; else if(a > 50) cout << 2; else if(a >= 0) cout << 1; else cout << 0;

Здесь, если a больше 100 то программа выведет 3, а иначе будет смотреть другие варианты. Если число больше 50, то выведет 2, больше или равно 0 выведет 1, а если число отрицательно выведет 0.

Примечание:

-Любое условие в С++ заключается в круглые скобки()
-Для сравнения переменных используются сравнительные символы >, <, ==, != (больше, меньше, равно, не равно)
-перед else всегда ставится точка с запятой

Оператор выбора.

Условный оператор позволяет выбрать в зависимости от значений предохранителей, являющихся логическими выражениями, одну из нескольких последовательностей операторов, образующих альтернативные варианты.

CaseStatement = case Expression of Case {"|" Case} [else StatementSequence] end.
Case = [CaseLabelList ":" StatementSequence].
CaseLabelList = CaseLabels {"," CaseLabels}.
CaseLabels = ConstExpression [".." ConstExpression].

В операторе выбора также допускается несколько вариантов (альтернативных последовательностей операторов). При этом с каждым вариантом связывается свой (отличный от других) элемент разбиения всех возможных значений условия на непустые (попарно не пересекающиеся) подмножества так называемых меток вариантов. Условие должно быть целого типа, литерного типа или типа перечисления (см. гл. 4). При выполнении оператора выбора условие осуществляет выбор варианта -- выполняется тот альтернативный оператор, среди меток вариантов которого есть константа, совпадающая с текущим значением условия (если такой метки не окажется, то фиксируется ошибка в программе).

Например, оператор выбора

case X of
'=' : K:=0
|'*', ' + ' : K:=1
|'-' : K:=2
else K:=3
end

Равносилен оператору

if X = ' = ' then K := 0
elsif (X = '*') or (X = '+') then K := 1
elsif X = '-' then K := 2
else K:=3
end.

Цикл с предусловием

Цикл while ("пока") с предусловием

Цикл while с предусловием позволяет выполнить одну и ту же последовательность действий пока проверяемое условие истинно. При этом условие записывается до тела цикла и проверяется до выполнения тела цикла.

При выполнении цикла while сначала проверяется условие. Если оно ложно, то цикл не выполняется и управление передается на следующую инструкцию после тела цикла while. Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.

Синтаксис цикла while ("пока") c предусловием такой:

While (условие)

{

Блок инструкций

}

Следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10:

int i=1;

while (i<=10)

{

cout<<i*i<<endl;

++i;

}

В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11, поскольку именно при i==11 условие i<=10 впервые перестанет выполняться.

В следующем примере цикл используется для того, чтобы найти количество знаков в десятичной записи целочисленной переменной i.

int Ndigits=0;

while(n!=0)

{

Ndigits=Ndigits+1;

n=n/10;

}

Внутри цикла значение переменной n уменьшается в 10 раз до тех пор, пока она не станет равна 0. Уменьшение целочисленной переменной в 10 раз (с использованием целочисленного деления) эквивалентно отбрасыванию последней цифры этой переменной.Цикл while с предусловием позволяет выполнить одну и ту же последовательность действий пока проверяемое условие истинно. При этом условие записывается до тела цикла и проверяется до выполнения тела цикла.

При выполнении цикла while сначала проверяется условие. Если оно ложно, то цикл не выполняется и управление передается на следующую инструкцию после тела цикла while. Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.

Синтаксис цикла while ("пока") c предусловием такой:

while (условие)
{
блок инструкций
}

Следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10:

int i=1;
while (i<=10)
{
cout<<i*i<<endl;
++i;
}

В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11, поскольку именно при i==11 условие i<=10 впервые перестанет выполняться.

В следующем примере цикл используется для того, чтобы найти количество знаков в десятичной записи целочисленной переменной i.

int Ndigits=0;
while(n!=0)
{
Ndigits=Ndigits+1;
n=n/10;
}

Внутри цикла значение переменной n уменьшается в 10 раз до тех пор, пока она не станет равна 0. Уменьшение целочисленной переменной в 10 раз (с использованием целочисленного деления) эквивалентно отбрасыванию последней цифры этой переменной.

Цикл с постусовием

Цикл "пока" с постусловием отличается от цикла с предусловием тем, что сначала выполняется блок цикла, а потом проверяется условие. Если условие истинно, то цикл будет выполнен еще раз, и так до тех пор, пока условие будет истинно. Синтаксис цикла с постусловием такой (обратите внимание на обязательную точку с запятой после условия):

do
{
Блок инструкций
}
while (условие);

Поскольку условие проверяется после выполнения тела цикла, то блок цикла с постусловием всегда будет выполнен хотя бы один раз, независимо от истинности условия. Это может привести к ошибкам, поэтому использовать цикл while с постусловием следует только тогда, когда это действительно упрощает алгоритм.

Цикл с параметром

Цикл с параметром [for]

fo Цикл с параметром [for]

Наши рекомендации