Организация потокового ввода вывода. Процедурно-ориентированные средства работы с потоками, страница 7

·  istream& get(unsignet char *array, char = '\n');

·  istream& get(unsignet char& c); // чтение одного символа

·  int peek();        // возвращает код следующего символа потока или EOF , если поток пуст, //  но оставляетт этот символ во входном потоке

// Цикл ввода до конца строки, т.е. до нажатия <ENTER>

{

 char c;

 while (cin.peek( )!= '\n') { cin.get(с); put(c); }

·  istream& putback(char c); // возвращает последний считанный символ потока

                            // обратно в поток

// извлечение из потока и пропуск n символов

·  istream& ignore (int n = 1, int EOF )

// чтение заданного количества символов в массив

·  istream& read (unsigned char* array, int n);

Функции доступа к потоку

·  istream& seekg (long  pos) – устанавливает чтение из потока

·  istream& seekg (long pos, seek_dir dir) – перемещение позиции чтения  вдоль потока в направлении, заданном параметром dir, который может принимать значения:

ios :: beg  - от начала потока

ios :: cur – от текущей позиции

ios :: end – от конца потока

·  long tellg(); - определяет текущую позицию чтения из потока

·  long tellp (  ) ; - определяет текущую позицию записи в поток

·  ostream& seekp (long pos, seek_dir dir) – определяет относительную позицию записи в поток

·  seekp (long  pos); - определяет абсолютную позицию записи в поток

Файловый ввод-вывод

            Файловые потоки соответствующих типов – это объекты классов:

ofstream outfile                       // - выходной файловый поток

ifstream infile                         // - входной файловый поток

fstream iofile                           // двунаправленный файловый поток

// присоединение файлового потока к файлу

·  void open (const char * filename, int mode, int access);

filename – имя файла

int access – режим доступа

int mode – флаги, определяющие режим работы с открываемым файлом. Они определены в модуле ios:

ios:: open_mod {

in = 0x01 – открыть файл для чтения

            out = 0x02 – открыть файл для записи

            ate = 0x04 – позиционировать в конец файла при открытии

            app = 0x08 – режим добавления в конец файла

            nocreate = 0x20 – не открывать новый файл

            noreplase = 0x40 – не открывать существующий файл

            binary = 0x80 - открыть файл для двоичного обмена

}

           access =

0  - обычный файл, со свободным доступом

1 - файл, только для чтения

2 - скрытый файл

4 -  системный файл

8 - архивный файл.

·  close(  );       // очистить буфер потока, отсоединить файл от потока и закрыть файл

·  eof(  );           // определяет, был ли достигнут конец файла при вводе (0 - достигнут)

·  good(  );         // возвращает ненулевое значение, если поток не испорчен, не достигнут

                                    // конец  файла и следующая операция может быть выполнена

//  Из файла считываются строки, либо целые числа, которые могут следовать в произвольном порядке:

#include < iostream.h>

#include < fstream.h>

#include < stdlib.h >

void main ( )

{

 char str[80], *p;

 ifstream in;

 in.open ("test.dat");

 if (!in.good){cout << "ошибка\n", exit (1);}

 do

 {

  p = str;

  ch = in.peek (  );

  if(isdigit(ch))

  {

   while(isdigit(*p=in.get())) p++;

   in.putback (*p);  //возврат в поток

   *p = '\0';

   cout << "целое число" : "<< atoi (str);

  }

  else if (isalpha (ch))

  {

   while (isalpha (*p = in. get (  )))p++;

   in.putback (*p); *p  = '\0';

   cout << "строка: " << str;

  }

  else in.get (  ); cout << '\n';

 }

 while ( ! in. eof (  ) ));

 in. close (  );

}