КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Строковые потоки предназначены для работы с данными, хранящимися в оперативной памяти. Работа со строковыми потоками будет рассмотрена позднее
Чтение данных из потока называется извлечением, а их запись – помещением в поток. Для увеличения скорости передачи данных используется механизм буферизации: данные помещаются или извлекаются в специальную область памяти – буфер, а физический обмен данными происходит по заполнению/опустошению буфера. Поток представляет собой последовательность примитивов ввода-вывода и реализован с помощью шаблонов, где в качестве параметра шаблона задается тип примитива charT. С помощью оператора typedef описаны потоки для типов char и wchar_t. В рамках настоящей темы будем рассматривать реализацию потоков для типа char и, следовательно, считать, что поток представляет собой последовательность символов. Потоки являются абстрактным понятием, введенным в языке C++ для однообразного описания и организации ввода-вывода. Иными словами, с помощью понятия потока можно как организовать ввод-вывод различных типов данных, так и обеспечить работу с различными внешними устройствами. Потоковый ввод-вывод ЛЕКЦИЯ 19 Ввод-вывод блоками используется бинарными потоками. Блочный ввод-вывод Блоком называется область оперативной памяти, содержимое которой записывается в байтах Запись блоков в файл: где ptr указывает на блок памяти, который записывается в файл; Чтение: Пример 18.4. Создание бинарного файла } printf("Input code,name.\n"); } Пример 18.5. Чтение бинарного файла void ReadBinFile(void) if(!(in = fopen("z.bin", "rb"))) } Потоковые классы Реализация механизма потоков выполнена средствами ООП, а потоковые классы и связанные с ними операции и функции представляют собой часть стандартной библиотеки классов. Потоки можно классифицировать по следующим критериям: по направлению обмена данными – на входные, выходные и двунаправленные; по виду внешних устройств – на стандартные, файловые и строковые: стандартные потоки предназначены для передачи данных от клавиатуры и на экран дисплея; файловые – для обмена информацией с файлами на внешних носителях; Ввод-вывод данных с использованием потоков может быть форматированным или неформатированным. В первом случае используются перегруженные операторы >> и <<, которые позволяют помещать в поток и извлекать из потока данные любых типв, в том числе и пользовательских. Во втором случае (неформатированный ввод-вывод) никакого преобразования данных не происходит, и работа с потоками во многом напоминает уже описанную ранее работу с файлами. · ios – базовый класс для всех потоков; · istream, ostream, iostream – классы для стандартных потоков; · ifstream, ofstream, fstream – классы для файловых потоков; · istringstream, ostringstream, stringstream – классы для строковых потоков.
Числа с дробной частью (float, double и т.д.) выводятся только в десятичной системе счисления, но могут быть представлены в фиксированной и экспоненциальной форме. Символы (тип char) и строки (т.е. данные типа char *) выводятся в соответствии с принятой кодировкой (в консольных приложениях – это т.н. кодировка OEM, соответствующая кодовой странице 866). Оператор >>, наоборот, анализирует последовательность данных во входном потоке и в случае правильной интерпретации преобразует данные во внутреннее представление того типа, который указан в качестве второго операнда. При этом разделителями между операндами является, среди всего прочего, и пробел, и, как следствие, возникают вопросы при вводе строк: окончанием строки является не нажатие клавиши Enter, а первый встреченный пробел. Для решения этой проблемы можно использовать неформатированный ввод. Флаги можно устанавливать с помощью функции setf(), а сбрасывать - с помощью функции unsetf(). В составе класса ios определены поля: long x_flags, содержащее набор битовых флагов, каждый из которых отвечает за тот или иной режим ввода-вывода и имеет свое имя, определенное в классе ios; Флаги форматирования internal - знак числа выводится по левому краю, а само число – по правому краю. boolalpha - перевод логического 0 и 1 соответственно в false или true; Форматирующие методы
long setf(long); Этот метод устанавливает флаги, указанные в параметре и не меняет остальные, например: cout.setf(ios::fixed|ios::left);
Дата добавления: 2014-01-07; Просмотров: 391; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |