- •ПОТОКИ
- •Чтение данных из потока называется
- •По направлению обмена потоки можно
- •При высокоуровневом (или форматированном) потоковом вводе-выводе байты группируются в значащие элементы данных, например,
- •cin - стандартный поток ввода.
- •Класс ostream поддерживает операции по выводу объектов.
- •Операции «поместить в поток» и «взять из потока» – это перегруженные операции сдвига
- •- fstream, который выполняет операции ввода- вывода файлов.
- •Пример использования объекта cerr
- •Вывод встроенных типов
- •Примечание.
- •Ввод встроенных типов
- •Для контроля соответствия количества введенных символов и объема зарезервированной памяти используется функции get
- •Пример. Использование функций get() и getline()
- •Эти байты не подвергаются какому-либо форматированию.
- •Манипуляторы потоков
- •-сброс потоков;
- •Манипуляторы потоков, задающие
- •Вызов любой из этих установок точности действует для последующих операций вывода до тех
- •Пример. Вывод вещественных чисел с заданным количеством цифр после
- •Установка ширины поля
- •Если число символов в обрабатываемом значении больше, чем заданная ширина поля, то лишние
- •Метод width имеет две реализации:
- •cin.width(15);
- •Примечание. Если при первом вводе строки количество символов превысило установленное в width (15),
- •endl – вставка символа новой строки и очистка потока.
- •char str[256]; cin.width(5);
- •Пример.
- •Флаги состояний формата
- •Флаг
- •Флаг
- •long ios::flags(long) – присваивает новые значения флагам и возвращает старые.
- •basefield (dec | oct | hex) floatfield (scientific | fixed)
- •Манипуляторами с параметрами для работы с флагами:
- •cout.setf(ios::showpoint);
- •cout.setf(ios::showbase);
- •Состояние ошибок потока
- •Бит eofbit автоматически устанавливается, когда встречается признак конца файла.
- •Бит badbit устанавливается для потока при возникновении ошибки, которая приводит к потере данных.
- •Метод int ios::rdstate() возвращает текущее состояние потока.
- •Метод ios::operator!() возвращает ненулевое значение, если установлен хотя бы один бит ошибки.
- •Потоковый файл последовательного
- •Режимы открытия файлов
- •Пример. Чтение данных из файла последовательного доступа и вывод их на экран.
- •int main() {
long ios::flags(long) – присваивает новые значения флагам и возвращает старые.
long ios::setf(long, long) – перед установкой некоторых флагов позволяет сбросить флаги, которые не могут быть установлены одновременно с ними.
Вкачестве первого параметра передается устанавливаемый флаг.
Вкачестве второго параметра передается одна из следующих статических констант класса ios:
adjustfield (left | right | internal)
basefield (dec | oct | hex) floatfield (scientific | fixed)
long ios::setf(long) – устанавливает флаги формата, заданные в качестве аргумента и возвращает предыдущие установки этих флагов.
long ios::unsetf(long) – сбрасывает указанные флаги формата и возвращает предыдущие их значения.
Манипуляторами с параметрами для работы с флагами:
setiosflags(long) – устанавливает флаги формата, указанные в аргументе.
resetiosflags(long) – сбрасывает флаги формата, указанные в аргументе.
Пример. Работа с флагами
#include <iostream> #include <iomanip>
using namespace std; int main() {
cout.setf(ios::showpoint);
cout<<9.0000<<endl;
cout<<9.9000<<endl;
cout<<9.9900<<endl;
cout.unsetf(ios::showpoint);
cout<<9.0000<<endl;
cout<<9.9000<<endl;
cout<<9.9900<<endl;
cout.setf(ios::hex, ios::basefield); int x=12345;
cout<<x;
cout.unsetf(ios::hex); cout<<endl<<setw(30)<<setiosflags(ios::left)<<x;
cout<<resetiosflags(ios::left); cout.flags(ios:: showpos | ios::internal);
cout<<setw(10)<<setfill(‘0')<<x<<endl;
cout.flags(ios::left);
cout<<setw(10)<<setfill('%')<<x<<endl;
cout.setf(ios::showbase);
cout<<oct<<x<<endl;
cout<<hex<<x<<endlё;
cout<<dec<<x<<endl;
double y=9000, z=0.0009; cout.unsetf(ios::showpos); cout.setf(ios::scientific | ios::uppercase);
cout<<y<<" "<<z<<endl; cout.unsetf(ios::uppercase);
cout<<y<<" "<<z<<endl;
cout.setf(ios::fixed, ios::floatfield); cout<<y<<" "<<z<<endl;
cout.setf(ios::hex,ios::basefield);
cout.setf(ios::uppercase);
cout<<x<<endl; return 0;
}
Состояние ошибок потока
Состояние ошибок потока можно проверить с помощью битов класса ios.
Совокупность этих битов определена в поле state класса ios.
enum io_state { goodbit = 0x00, eofbit = 0x01, failbit = 0x02, badbit = 0x04
};
Состоянием потока можно управлять с помощью методов и операций.
Бит eofbit автоматически устанавливается, когда встречается признак конца файла.
Для проверки состояния этого бита можно использовать метод int ios::eof(), который
возвращает true, если встретился признак конца файла.
Бит failbit устанавливается для потока, если в потоке происходит ошибка форматирования, но символы не утеряны.
Проверяет это бит метод int ios::fail(), который
возвращает ненулевое значение, если бит failbit установлен.
Бит badbit устанавливается для потока при возникновении ошибки, которая приводит к потере данных.
Проверяют этот бит методы int ios::fail() и int ios::fail() класса ios.
Если бит badbit установлен, эти функции возвращают ненулевое значение.
Бит goodbit устанавливается, если нет ошибок в потоке.
Проверяет этот бит метод int ios::good(), который в случае отсутствия ошибок возвращает истину.