Программирование >>  Элементы языков с и с++ 

1 ... 70 71 72 [ 73 ] 74 75 76 ... 200


Г Листинг 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. По умолчанию стандартные потоки С и С++ синхронизированы.



1 ... 70 71 72 [ 73 ] 74 75 76 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика