Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный
Лекция 6:

Буферизированный (потоковый) ввод-вывод

6.6. Приложение №3. Описание функций потокового ввода-вывода средствами языка C++

Для потокового ввода-вывода данных (например, при чтении из стандартного потока или при записи в стандартный поток вывода или ошибок) используются следующие функции, являющиеся методами классов istream и ostream

ОПЕРАТОР << (вывода)
ОПРЕДЕЛЁН В: <iostream.h>
СИНТАКСИС: ostream << argument[ << arguments…];
НАЗНАЧЕНИЕ: Оператор осуществляет вывод в поток ostream аргументов;
ОПИСАНИЕ: Оператор "<<" осуществляет вывод в поток ostream (которым может быть любой поток вывода), указанных после его знака аргументов. Порядок "вычисления" аргументов производится слева направо;
ПРИМЕЧАНИЕ: В заголовочном файле определены операции вывода строки символов, целых, длинных целых значений и значений с плавающей точкой двойной точности. При выводе других значений необходимо "явное" приведение типов;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Ссылка на поток ostream, в который был произведён вывод;

ОПЕРАТОР >> (ввода)
ОПРЕДЕЛЁН В: <iostream.h>
СИНТАКСИС: istream >> argument[ >> arguments…];
НАЗНАЧЕНИЕ: Оператор осуществляет ввод аргументов из потока istream ;
ОПИСАНИЕ: Оператор ">>" осуществляет ввод из входного потока istream (которым может быть любой поток ввода), указанных после его знака аргументов. Порядок ввода элементов из потока - слева направо. Вводимые значения должны соответствовать объявленному типу и должны разделяться пробелом (пробелами);
ПРИМЕЧАНИЕ: В заголовочном файле оператора определены операции ввода строки символов, одинокого символа, короткого целого, целого и длинного целого числа, чисел с плавающей точкой пониженной и удвоенной разрядности. При выводе других значений необходимо "явное" приведение типов. Оператор не вводит пробельных символов;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Ссылка на поток istream, из которого был произведён ввод;

ФУНКЦИЯ istream.get
ОПРЕДЕЛЕНА В: <iostream.h>
СИНТАКСИС:
istream.get( ch );
char &ch;
НАЗНАЧЕНИЕ: Функция ввода одиночного символа;
ОПИСАНИЕ: Указанная функция просто читает один символ и помещает его в свой аргумент. Функция может читать любые символы, в том числе "пробельные" и "двоичные";
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Ссылка на поток istream, из которого был произведён ввод;
ПРИМЕЧАНИЕ: Вследствие этого несколько функций .get, выводящих данные в один поток, могут сцепляться, а также могут сцепляться функции .get и .ignore.

ФУНКЦИЯ istream.get
ОПРЕДЕЛЕНА В: <iostream.h>
СИНТАКСИС:
istream.get( p, n, z='\n' );
char *p;
int n;
int z;
НАЗНАЧЕНИЕ: Функция чтения из потока строки символов;
ОПИСАНИЕ: Указанная функция читает и размещает по адресу, заданному первым аргументом, не более символов, заданных вторым аргументом. По-умолчанию функция get прочтёт не более чем n символов и не более чем одну строку. Последнее ограничение определяется третьим аргументом - он задаёт символ ограничитель строки, который в операционных системах по-умолчанию является '\n'. Функция позволяет вводить пробельные символы;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Ссылка на поток istream, из которого был произведён ввод;
ПРИМЕЧАНИЕ: Вследствие этого несколько функций .get, выводящих данные в один поток, могут сцепляться, а также могут сцепляться функции .get и .ignore ;

ФУНКЦИЯ istream.peek
ОПРЕДЕЛЕНА В: <iostream.h>
СИНТАКСИС: char istream.peek();
НАЗНАЧЕНИЕ: Функция возвращает следующий символ из потока;
ОПИСАНИЕ: Указанная функция возвращает следующий символ из потока, но не удаляет его из потока;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Прочитанный символ или EOF, если достигнут конец потока или произошла ошибка ввода данных;

ФУНКЦИЯ istream.ignore
ОПРЕДЕЛЕНА В: <iostream.h>
СИНТАКСИС:
istream.ignore( Limit = 1, Delim = EOF );
int Limit;
int Delim;
НАЗНАЧЕНИЕ: Функция пропускает заданное количество символов;
ОПИСАНИЕ: Указанная функция пропускает заданное количество символов (по умолчанию - 1) и останавливается, если встречает символ Delim. По-умолчанию, если не заданы никакие аргументы, функция .ignore() пропускает один символ и останавливается, если встречает конец файла;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Ссылка на поток istream, из которого был произведён ввод;
ПРИМЕЧАНИЕ: Вследствие этого несколько функций .ignore, выводящих данные в один поток, могут сцепляться, а также могут сцепляться функции .get и .ignore ;

ФУНКЦИЯ ostream.put
ОПРЕДЕЛЕНА В: <iostream.h>
СИНТАКСИС:
ostream.put( ch );
char ch;
НАЗНАЧЕНИЕ: Функция выводит одиночный символ;
ОПИСАНИЕ: Указанная функция выводит одиночный символ в поток ostream (которым может быть любой поток вывода). Функция может вывести даже "двоичный символ";
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Ссылка на поток ostream, куда был произведён вывод;
ПРИМЕЧАНИЕ: Вследствие этого несколько функций .put, выводящих данные в один поток, могут сцепляться, а также могут сцепляться функции .put и .write ;

ФУНКЦИЯ ostream.write
ОПРЕДЕЛЕНА В: <iostream.h>
СИНТАКСИС:
ostream.write( buf, n);
const char *buf;
int n;
НАЗНАЧЕНИЕ: Функция выводит буфер buf ;
ОПИСАНИЕ: Указанная функция выводит в поток ostream (которым может любой выходной поток) не более чем n символов из буферной строки buf. При этом буфер может содержать не только текстовые, но и двоичные данные!
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Ссылка на поток ostream, куда был произведён вывод;
ПРИМЕЧАНИЕ: Вследствие этого несколько функций .write, выводящих данные в один поток, могут сцепляться, а также могут сцепляться функции .put и .write ;

Дополнительную информацию о функциях и операторах потокового ввода-вывода данных в C++ смотри [10, 30]

6.7. Приложение №4. Описание класса SavitchIn из [26]

Класс, обеспечивающий ввод данных с консольного устройства. Данный класс был разработан автором [26] Уолтером Савитчем для некоммерческого использования с целью обучения программированию. Сайт учебного пособия [26] (на английском языке) расположен по адресу: http://www.cse.ucsd.edu/users/savitch/books/cs1.java//

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

Данный класс включает в себя следующие функции:

  • readLine();
  • readLineWord();
  • readLineInt();
  • readLineLong();
  • readLineDouble();
  • readLineFloat();
  • readLineNonwhiteChar();
  • readLineBoolean();
  • readChar();
  • readInt();
  • readLong();
  • readDouble();
  • readFloat();
  • readWord();
  • readLineByte();
  • readLineShort();
  • read();

Текст функций данного класса (на языке Java) смотри в архиве примеров к данному курсу или приведённой выше ссылки Интернета.

Artem Bardakov
Artem Bardakov
Россия
Андрей Алабин
Андрей Алабин
Россия