Потоки ввода-вывода являются
средством обмена данными с внешними устройствами. Поток может быть
связан с конкретным устройством и поэтому вывод в файл по форме
ничем не отличается от вывода на экран.
Ввод-вывод осуществляется через побитовые потоки данных. Эти потоки
проводятся через буфер. Информация накапливается в буфере и затем
блоком передается в файл. Механизм осуществления потокового
ввода-вывода основан на иерархии классов. Базовым классом для
потоков является класс ios. Подклассами ios являются istream,
ostream, streambuf(работа с файлами – их ввод\вывод). Подклассом
классов isream и ostream является iostream, который предназначен для
работы с файлами.
istream создает 4 объекта: cin, cout, cerr (небуферизированный вывод
на экран), clog(буферизированный вывод ошибок на экран). Объекты cin
и cout являются экземплярами классов isream и ostream. Определение
этих объектов содержится в заголовочном файле iosream.h. Объект cin
позволяет осуществлять консольный ввод, а объект cout- консольный
вывод.
Cin>>a>>b>>c – ввод с клавиатуры a,b,c.
Оператор >> возвращает ссылку на объект cin (перегруженный оператор).
Методы cin:
1) get() - может быть без параметров и тогда возвращает значение
символа, либо end of file при достижении конца. Используется для
ввода строки символов содержащей пробелы.
Например: # include<iostream.h>
int main()
{ char ch;
while ((ch=cin.get()!=EOF))
{ cout<<”ch:”<<ch<<endl; }
return 0; }
Ctrl+Z – ввод EOF (остановка программы).
Использование в get параметра означает, что этому параметру
присваивается очередной символ из потока.
Например: # include<iostream.h>
int main()
{ char a,b,c;
cout<<”Enter”;
cin.get(a).get(b).get(c);
cout<<a<<b<<c; }
Ввод строки осуществляется оператором get с тремя параметрами.
Get (имя, максимальное число символов в строке, разделитель строк).
Если разделитель опущен, то по умолчанию используется ‘\n’.
Например: char string1[256];
Cin . get(string1,256);
Аналогично эту строку можно ввести следующим образом:
Cin . getline(string1,256);
В отличие от get, getline считывает и удаляет из буфера символ
перевода строки. Если символ ‘\n’ встречается раньше, чем введенный
последний допустимый символ, то get считывает строку до этого
символа, а остальные оставляет в буфере.
2) Cin .ignore(n, ‘\n’); n- число пропускаемых символов. Этот
оператор пропускает часть символов строки от начала до указанного
числа, либо до указанной строки или до конца файла.
3) Cin .
peek(); просматривает, но не считывает символы.
4) Cin . putbaсk(‘c’); позволяет вставить в выходной поток один
символ.
Например: # include<iostream.h>
int main()
{ char ch;
cout ”Enter frase”;
while (cin.get(ch))
{ if (ch = = ‘!’)
cin.putbaсk(‘$’);
else cout<<ch;
while(cin.peek() = = ‘#’)
cin.ignore(1,’#’); }
return 0;}
Оператор cout имеет два метода: cout . put и cout . write. Первый
выводит один символ и возвращает ссылку на объект ostream. Cout .
put(‘H’) .put(‘C’) .put(‘D’); - вывод трех подряд символов.
Второй метод имеет 2 параметра: строка, длина строки-
cout.write(str,l).
Например: # include<iostream.h>
int main()
char One[]=”This is sample”;
int fulllength = strlen(one);
int tooshort = fulllength –4;
int toolongs = fulllength +6;
cin.write(one,fulllength);
cin.write(one, tooshort);
cin.write(one, toolongs);
Return 0; }