Fopen(“output.txt”); // использование метода open 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Fopen(“output.txt”); // использование метода open



if(!f)

{

cout<< “ невозможно открыть файл для записи ”;

return 1;

}

Чтение и запись выполняются с помощью операций чтения и извлечения аналогичных потоковым классам, либо с помощью методов класса.

Пример 3

#include<fstream.h>

Int main()

{

char text[81], buf[81];

cout<<” введите имя файла “;

cin>>text;

ifstream(text, ios::in| ios::nocreate);

if (!f)

{

cout <<” ошибка открытия файла “;

return 1;

}

while(!f, eof())

{

f.getline(buf, 81);

cout <<buf <<endl;

}

return 0;

}

Для закрытия потока определен метод close, но поскольку он неявно выполняется деструктором, то явный вызов требуется, когда необходимо закрыть поток раньше конца его области видимости.

Строковые потоки

Строковые потоки позволяют считывать и записывать информацию из области оперативной памяти так же как из файла. консоли, экрана.

В стандартных библиотеках в потоковых потока определено три класса:

Isstringstream – входной

Ostringstream – выходной

Stringstream – двунаправленный

Эти классы определяются в заголовочном файле <sstream>. Они являются производными от классов istream, ostream, iostream. Соответственно наследуют << и >>, флаги форматирования, манипуляторы.

Строковые классы определяются в соответствии с правилами C++, строковые потоки создаются с соответствующими участками памяти с помощью конструкторов.

explicit istringstream (int mode = ios::in);

explicit istringstream (const string &name, int mode = ios::in);

explicit ostringstream (int mode = ios::out);

explicit ostringstream (const string & name, int mode = ios::out);

explicit stringstream (int mode = ios::in | ios::out);

explicit stringstream (const strin &name, int mode = ios::in | ios::out);

Строковые потоки являются аналогами sprintf, sscanf, и могут использоваться для преобразования данных, когда они заносятся в некоторый участок памяти, а затем считываются в величины требуемых типов. Эти потоки могут применятся для обмена информацией между модулями программы.

В строковых потоках описан метод str, возвращающий копию строки или устанавливающий ее значение.

string str() const;

void str(const string &s);

Проверять строковый поток на переполнения не требуется, т.к. размер строки изменятся динамически.

Пример 4

Пример программы, в которой строковый поток используется для формирования сообщений, включающих текущее время, и передает в качестве параметра.

#include<sstream>

#include<string>

#include<iostream>

#include<time>

using namespace std;

String message(int i;)

{

osting stream os;

time_t t;

time(&t);

os<<”time”<< ctime(&t) << “number:“ << i << endl;

return os.str();

}

Int main()

{

cout << message (22);

return 0;

}

Потоки и типы, определяемые пользователем.

Для ввода-вывода в потоках, определяемых пользователем, также используется перегрузка для всех стандартных типов операций чтения и извлечения, при этом выбор конкретной операции определяется типом фактических параметров.

Чтобы вводить/выводить величины типов, определяемых пользователем, требуется перегрузить эти операции. Это бинарные операции, левым операндом которых является объект-поток, а правым – объект, который требуется извлечь/поместить в этот поток. Возвращенное значение должно быть ссылкой на поток, чтобы можно было организовать цепочки операций.

Пример 5

Class b1

{

...

int x;

float y;

...

//Чтобы вводить/выводить объекты класса b1 требуется определить в классе b1 операции следующего вида

friends ostream &operator << (ostream out, b1 &c)

{

return out << “ x= “ << c.x << “ y= “ << c.y;

}

friend istream &operator >> (istream in, b1 &c)

{

cout << “Enter x:”; in>> c.x;

cout << “Enter y:”; in>> c.y;

return in;

}

...

};

После того как в программе определены операции ввода/вывода, в данной программе можно использовать объекты класса b1 в операторах ввода/вывода наряду с величинами стандартных типов.


Пример 6

#include<iostream.h>

Class b1

{

int x;

float y;

public:

b1(int nx = 1, float ny = 0.01)

{

x=nx;

y=ny;

}

friends ostream &operator << (ostream out, b1 &c)

{

return out << “ x= “ << c.x << “ y= “ << c.y;

}

friend istream &operator >> (istream in, b1 &c)

{

cout << “Enter x:”; in>> c.x;

cout << “Enter y:”; in>> c.y;

return in;

}

};

Int main()

{

b1 c;

cout << c << endl;

b1 c1(100,100);

cout << c1 << endl;

b1 c2;

cin >> c2;

cout << c2 << endl;

return 0;

}

Форматирование данных

В потоковых классах форматирование данных можно осуществить тремя способами, а именно, с помощью:

· флагов

· манипуляторов

· форматирующих методов



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 35; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.222.47 (0.01 с.)