Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab7.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
82.43 Кб
Скачать

Символы форматирования аргументов

Символ

Вводимое значение

Тип аргумента функции

i

Десятичное, восьмеричное или шестнадцатеричное целое

int *arg;

l

Десятичное, восьмеричное или шестнадцатеричное целое

long *arg;

d

Десятичное целое

int *arg;

D

Десятичное целое

long *arg;

u

Десятичное целое без знака

unsigned int *arg;

U

Десятичное целое без знака

unsigned long *arg;

e, E

Действительное с плавающей запятой

float *arg;

s

Строка символов

char arg[ ];

c

Символ

char *arg;

l

Расширяет тип целого до long int, а тип действительного – до double

long int* arg;

double *arg;

1.2. Двоичные файлы

Двоичный файл представляет собой последовательность символов, в которой без каких-либо разделителей (пробелов, символов конца строки и т.д.) хранятся символы, отображающие различные объекты. Они совпадают с тем, как хранятся соответствующие объекты в оперативной памяти. Последовательность хранения данных в двоичном файле задается программой.

Двоичные файлы имеют преимущества перед текстовыми при хранении числовых данных, операции записи и чтения в таких файлах производятся намного быстрее, т.к. отсутствует необходимость форматирования – перевода в текстовое представление и обратно. Двоичные файлы, как правило, имеют гораздо меньший объем, чем текстовые. В двоичных файлах можно производить запись и чтение в произвольной последовательности.

Открытие двоичных файлов осуществляется аналогично текстовым:

FILE *F1,*F2;

F1=fopen(“Text.txt”,”rb”); // Только чтение

F2=fopen(“Text.txt”,”rb+”); // Чтение и запись.

Запись и чтение в двоичном файле производятся соответственно функциями fwrite и fread:

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);

size_t fread(void *ptr, size_t size, size_t n, FILE *stream);

где ptr – указатель на выводимые или вводимые данные; size – размер в байтах передаваемых данных; n – число передаваемых данных; stream – поток.

Пример записи и чтения:

struct new_struct // Описание структуры

{

int a;

char ch;

};

// В обработчике кнопки «Запись»

FILE *F1;

new_struct s;

if ((F1 = fopen("test.dat", "wb")) == NULL) /* Если не удалось открыть файл */

return 1;

s.a = 20;

s.ch = 'A';

double h=6.789;

fwrite(&s, sizeof(s), 1, F1); /* Запись структуры в файл */

fwrite(&h, sizeof(double), 1, F1); /* Запись переменной в файл */

fclose(F1); /* Закрыть файл */

// В обработчике кнопки «Чтение»

FILE *F1;

new_struct s;

F1=fopen("Text.dat","rb+");

fseek(F1, SEEK_SET, 0);

fread(&s,sizeof(s),1,F1); /* Прочитать структуру из файла */

fclose(F1); /* Закрыть файл */

В данном примере при записи и чтении данных используется оператор sizeof, который определяет размер в байтах переменной либо типа данных:

sizeof(s), где s – объект структуры;

sizeof(double), определяет размер типа double.

2. Файловый ввод/вывод с помощью потоков в стиле С++

В С++ определены три класса потокового ввода/вывода:

ifstream

входные файлы для чтения

ofstream

выходные файлы для записи

fstream

файлы для чтения и записи

При работе с файлами этих классов можно использовать ряд присущих им функций, но можно также использовать операции помещения в поток (<<) и извлечения из потока (>>). Для работы с этими классами необходимо подключение заголовочного файла:

# include <fstream.h>,

для изменения манипуляторов потока необходимо подключить

#include <iomanip.h>

#include <rw\iosbase.h>

Таблица 4

Основные функции для работами с файлами с помощью потоков С++

Функция

Описание

Примеры

put

Вывод символа в поток

ofstream out1 (“Test.dat”); // outпоток для записи

out1. put (‘Б’);

out1. put (‘T’). put (‘\n’); // Допускается сцепленный вызов

write

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

out1. write(s, 5); // вывести 5 символов из массива s

get

Получить одиночный символ из указанного потока

ifstream in1(“Test.dat”);

char c; int cnt=0;

while ((c=in1. get())!=EOF)

{

cnt++;

}

getline

Получить строку из потока

char s[80];

in1. getline (s, 80);

eof

Проверка достижения конца файла

if(in1.eof()) break; // Если считанный символ – символ конца файла, то прервать работу

close

Закрыть поток

out1.close();

in1. close();

Манипуляторы системы счисления (<iomanip.h>)

dec

Десятичная

ofstream out1 (“Test.dat”);

int a=31;

out1<<a<<’ ’<<hex<<a<<’ ‘<<oct<<a<<’ ‘<< setbase(10)<<a<< endl; // endl – конец строки

oct

Восьмеричная

hex

Шестнадцатеричная

setbase

Задать систему счисления

Точность выводимых чисел (<iomanip.h>)

precision

Метод

for (int I=0;I<10;I++)

out1. precision(I);

out1<<sqrt(7)<<endl;

/* значение параметра I==0 – установка точности по умолчанию = 6 */

setprecision

Манипулятор потока

for (int I=0;I<10;I++)

out1<<setprecision(I)<<sqrt(7)<<endl;

/* значение параметра I==0 – установка точности по умолчанию = 6 */

Число символьных позиций, в которые число будет выведено (<iomanip.h>)

width

Метод

int k=25;

out1. width(5);

out1<<k<<endl;

setw

Манипулятор потока

int k=25;

out1<<setw(5)<<k<<endl;

Флаги состояния формата (rw\iosbase.h)

ios::skipws

Пропуск символов разделителей во входном потоке

ios::left

Выравнивание по левой границе поля

ios::right

Выравнивание по правой границе поля

ios::internal

Выравнивание знака или системы счисления по левой, а числа – по правой границе поля

ios::dec

Десятичная система счисления

ios::oct

Восьмеричная

ios::hex

Шестнадцатеричная

ios::showbase

Вывод основания системы счисления

ios::showpoint

Обязательная печать десятичной точки и нулевых младших разрядов

ios::uppercase

Вывод символов X и Е в верхнем регистре в hex и эксп. форматах соответственно

ios::showpos

Вывод символа «+» перед положительными числами

ios::scientific

Экспоненциальное представление действительных чисел

ios::fixed

Формат действительных чисел с фиксированной точкой

Управление флагами состояния формата (rw\iosbase.h и iomanip.h)

flags

Задание сразу всех флагов

setf

Метод

Установка одного и более параметров

out1.setf(ios::left | ios::scientific);

out1<<sqrt(7)<<endl;

setiosflags

Манипулятор

out1<<setiosflags(ios::left | ios::scientific)<<sqrt(7) <<endl;

unsetf

Метод

Сброс флагов, указанных параметром

out1. unsetf(ios::left | ios::scientific);

out1<<sqrt(7)<<endl;

resetiosflags

Манипулятор

out1<<resetiosflags(ios::left)<<resetiosflags(ios::scientific)<<sqrt(7) <<endl;

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