Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_Obektno-orientirovannoe_programmirovan...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
351.74 Кб
Скачать

Void main(void)

{

int i=44;

float f=3456.13246;

cout <<"Вывод вещественного с точностью, заданной по умолчанию\n";

cout << f;

// задание точности вывода для вещественного: 2 знака после запяиой

cout <<"\nВывод вещественного с заданной точностью\n";

cout <<setprecision(4);

cout <<f;

cout <<"\nВывод целого в различных системах счисления:\n";

cout << "десятичное i=" << setw(4) << i <<"\n";

cout << "шестнадцатеричное i=" << hex << i <<"\n";

cout << "восьмеричное i=" << oct << i <<"\n";

cout <<dec;

//установка символа-заполнителя и ширины поля вывода

cout << setfill('*') <<setw(20) << "ПРИВЕТ";

cout<< setfill('*') <<setw(20)<<endl;

}

Результаты работы этой программы имеют вид:

Вывод вещественного с точностью, заданной по умолчанию

3456.132568

Вывод вещественного с заданной точностью

3456.1326

Вывод целого в различных системах счисления:

десятичное i= 44

шестнадцатеричное i=2c

восьмеричное i=54

**************ПРИВЕТ*******************

6.4 Организация файлового ввода-вывода

Файловый ввод-вывод поддерживают классы:

ifstream – производный от istream, наследует операции извлечения из потока >>;

ofstrem - производный от ostream, наследует операции вставки << в поток ;

fstream - производный от iostream.

В программы, использующие эти классы, следует включить заголовочный файл

< fstream.h>.

В С++ файл открывается посредством его связывания с потоком. Имеется три типа потоков: входной, выходной и входной-выходной потоки. Перед тем, как открыть файл, нужно создать поток, например:

ifstream f1; // создание файлового потока для ввода данных;

ofstream f2; // создание файлового потока для вывода данных;

fstream f3; // создание файлового потока для ввода и вывода данных.

После создания потока его можно привязать к файлу с помощью функции open(). Прототип этой функции имеет вид:

Void open(char* filename, int mode, int access);

где:

filename – имя файла, может включать путь;

mode задает режим открытия файла, может принимать одно (или более) из следующих значений:

ios::app // добавление в конец файла, только для вывода;

ios::ate // позиционирование в конец файла;

ios::binary // открытие в двоичном режиме;

ios::in // открытие файла для ввода;

ios::nocreate // функция open вернет ошибку, если файл не существует;

ios::noreplace // функция open вернет ошибку, если файл уже существует;

ios::out // открытие файла для вывода;

ios::trunc // удаление содержимого ранее существовавшего файла с тем

// же названием и усечение его до нулевой длины;

По умолчанию mode для ifstream равен ios::in, а для ofstream он равен ios::out.

access задает права доступа к файлу. В среде DOS и Windows этот параметр обычно соответствует кодам атрибутов файлов и может иметь значения, показанные в таблице 6.3.

Таблица 6.3. Коды атрибутов файлов.

Атрибут

Значение

0

Обычный файл со свободным доступом

1

Файл только для чтения

2

Скрытый файл

4

Системный файл

8

Архивный файл

По умолчанию значение access равно нулю.

Например:

f1.open(“test.txt”, ios::nocreate);

f2.open(“c:\\user\\bi62\\dan.dat”, ios::out, 0);

f3.open( “test”, ios::in | ios::out);

Для потока f2 оператор привязки потока к файлу файла можно было бы записать короче, тогда будут использованы значения параметров открытия по умолчанию:

f2.open(“c:\\user\\bi62\\dan.dat”);

Примечание.

Если поток открывается как для ввода, так и для вывода, это поток f3 в примере, то использовать значение mode по умолчанию нельзя.

Если open() завершилась с ошибкой, поток будет равен нулю. Поэтому перед использованием файла следует убедиться в его успешном открытии, например:

if (!f2)

{

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

exit (-1); // Завершение программы с кодом ошибки

}

Можно в одном операторе выполнить как создание потока, так и привязку его к файлу, например:

ifstream f1 ( “test.txt” ); // открытие файла для ввода;

ofstream f2 (“c:\\user\\bi62\\dan.dat”); // открытие файла для вывода.

Для закрытия файла следует использовать функцию-метод close(), например:

f1.close();

f2.close();

Функция close() не имеет параметров и возвращаемого значения.

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

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

Для определения момента достижения конца файла следует использовать функцию-метод eof(), имеющую следующий прототип:

int eof();

При достижении конца файла она возвращает ненулевое число, в противном случае возвращает ноль.

В листинге 6.4 показан пример программы, выполняющей копирование файла и вывод числа скопированных символов. При запуске этой программы на исполнение из командной строки должны быть переданы имена копируемого файла и файла-копии из командной строки, например, если имя файла программы copyf.exe, и следует скопировать файл dan.dat в файл dancopy.dat, то командная строка должна иметь вид:

copyf dan.dat dancopy.dat

Листинг 6.4. Копирование текстовых файлов и вывод числа скопированных символов.

#include <iostream.h>

#include <fstream.h>

main(int argc, char *argv[ ])

{

if(argc!=3) {

cout << "Использование: CPY <input> <output>\n";

return 1;

}

ifstream fin(argv[ 1 ]); // открытие входного файла

ofstream fout(argv[ 2 ]); // создание выходного файла

if(!fin) {

cout << "Входной файл открыть невозможно\n";

return 1;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]