|
Программирование >> Элементы языков с и с++
Г Листинг 9.14 40.срр : Defines the entry point for the console application. #include stdafx.h #include<iostream> for cin, cout #include<fstream> #include <conio.h> ttinclude <stdio.h> void tmain ( ) using namespace std; /*используется стандартное пространство имен*/ /*данные о сотрудниках*/ struct Blocknotes { char name[30]; char phone[15]; int age; )b[2]={ Smit , 123456 ,45, Kolly , 456789 ,50 }; инициализация массива структур запись данных в файл ofstream FILE; FILE.open( Block ,ios::binary); for(int i=0; i<2; i++) FILE.write((char *)&b[i],sizeof(b[i])) ; FILE.close0; чтение данных из файла ifstream FILEl; FILEl.open( Block ,ios::binary) ; мер программы приведен в листинге 9.14, результат работы программы показан на рис. 9.10. Blocknotes bb[2]; int 1=0; while(!FILEl.eof О) { if(i==2) goto m; FILEl.read((char *)&bb[i].sizeof(bb[i])); cout string i bb[i] .name bb[i] .phone bb[i] .age endl; i++; FILEl.close 0; system( DEL BLOCK ); getch(); ~ C:\WINOOWS\system32\cmd.exe itringO Snit 123456 45 tiinal Kolly 456789 50 1/1Я продолжения нажмите любую клавишу Рис. 9.10. Результат работы программы листинга 9.14 Пояснений требуют следующие моменты: D запись FILE.write((char *)&b[i],sizeof(b[i])); Здесь для записи используется функция буферизированного вывода write о. где первым аргументом является указатель на структуру, из которой мы должны записывать данные. Этот указатель равен адресу структуры, т. е. &b[i]. Но в потоке все данные хранятся побайтно, поэтому тип указателя char (здесь идет принудительное преобразование типа). Второй аргумент- длина записи, она определяется стандартной функцией sizeof о; D system ( DEL BLOCK ); - ЭТОЙ функцией удаляется рабочий файл; 3 оператор goto применен для подстраховки от превыщения индекса массива bb [ ]. 222 Гпава S Стандартный ввод/вывод в С++ Общие положения Стандартный ввод/вывод является частным случаем файлового ввода/вывода. При файловом вводе/выводе мы объявляли экземпляры соответствующих поточных классов, а затем пользовались методами и операциями: , . Но как мы видели в начале этой главы, классы istream, ostream, лежащие в основе поточных классов, содержат стандартные объекты-экземпляры классов с именами cout (экземпляр класса для стандартного ввода), cin (экземпляр класса для стандартного вывода) и cerr (экземпляр класса для стандартного вывода сообщений об ошибках). При запуске любой программы на языке С++ эти стандартные потоки определены (открыты) и по умолчанию назначены на стандартное вводное устройство - клавиатуру (cin), на стандартное выводное устройство - экран (cout и cerr). Причем все эти устройства синхронно связаны с соответствующими указателями stdin, stdout, stderr. Так что работа со стандартным вводом/выводом сводится к тому, что вместо задаваемых пользователем имен экземпляров соответствующих классов задаются имена стандартных экземпляров классов: cin, cout. Открывать ничего не надо, надо только использовать операции , и операции форматирования. Если мы пишем имена переменных, из которых выводятся или в которые вводятся данные, то по умолчанию для ввода/вывода используются определенные форматы. Например, запишем: cout i; В этом случае значение i выведется на экран в формате, определенном по умолчанию для типа i и в минимальном поле. Запишем: cin i j s; где i, j, s описаны, соответственно, как int, float, char. В записи не видно форматов, но при вводе значений этих переменных с клавиатуры (после ввода каждого значения надо нажимать <Enter>) их форматы будут учтены. Стандартный вывод cout Объект cout направляет данные в буфер-поток, связанный с объектом stdout, объявленным в файле stdio.h. По умолчанию стандартные потоки С и С++ синхронизированы.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |