1.3.11 Операции ввода-вывода информации

      Потоки ввода-вывода являются средством обмена данными с внешними устройствами. Поток может быть связан с конкретным устройством и поэтому вывод в файл по форме ничем не отличается от вывода на экран.
      Ввод-вывод осуществляется через побитовые потоки данных. Эти потоки проводятся через буфер. Информация накапливается в буфере и затем блоком передается в файл. Механизм осуществления потокового ввода-вывода основан на иерархии классов. Базовым классом для потоков является класс 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; }