Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet102/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   98   99   100   101   102   103   104   105   ...   193
Bog'liq
Book-qtC


Глава 7. Организация ввода-вывода в C++
Запись в двоичный файл
осуществляется с помощью функции
fwrite (const void *ptr, size, n, FILE *filename);
Функция записывает в файл filename из массива ptr n элементов размера
size
. Функция возвращает количество записанных элементов. После записи ин-
формации в файл, указатель файла смещается на n*size байт.
Для контроля достижения конца файла есть функция
int feof(FILE * filename);
Она возвращает ненулевое значение, если достигнут конец файла.
Рассмотрим использование двоичных файлов на примере решения двух стан-
дартных задач.
Задача 7.4.
Создать двоичный файл abc.dat, куда записать целое число n и n
вещественных чисел.
#include 
#include 
using namespace s t d ;
i n t main ( )
{
FILE ∗ f ; //Описание файловой переменной.
i n t i , n ; double a ;
f=f o p e n ( " a b c . d a t " , " wb " ) ; //Создание двоичного файла в режиме записи.
cout<<" n = " ; c i n >>n ; //Ввод числа n.
f w r i t e (&n , s i z e o f ( i n t ) , 1 , f ) ; //Запись числа в двоичный файл.
f o r ( i =0; i {
cout<<" a = " ; c i n >>a ; //Ввод очередного вещественного числа.
f w r i t e (&a , s i z e o f ( double ) , 1 , f ) ; //Запись числа в двоичный файл.
}
f c l o s e ( f ) ; //Закрыть файл.
return 0 ;
}
Задача 7.5.
Вывести на экран содержимое созданного в задаче 7.4 двоичного
файла abc.dat.
#include 
#include 
using namespace s t d ;
i n t main ( )
{
FILE ∗ f ; //Описание файловой переменной.
i n t i , n ; double ∗ a ;
f=f o p e n ( " a b c . d a t " , " rb " ) ; //Открыть существующий двоичный файл в режиме чтения.
f r e a d (&n , s i z e o f ( i n t ) , 1 , f ) ; //Читать из файла целое число в переменную n.
cout<<" n = "<a=new double [ n ] ; //Выделение памяти для массива из n чисел.
f r e a d ( a , s i z e o f ( double ) , n , f ) ; //Чтение n вещественных чисел из файла в массив a.
f o r ( i =0; i cout<f c l o s e ( f ) ; //Закрыть файл.
return 0 ;
}
Двоичный файл
— последовательная структура данных, после открытия фай-
ла доступен первый байт. Можно последовательно считывать из файла или за-
писывать их в него. Допустим, необходимо считать пятнадцатое, а затем первое
число, хранящееся в файле. С помощью последовательного доступа это можно
сделать следующим образом.
Программирование на языке С++ в среде Qt Creator


7.3. Обработка двоичных файлов
239
FILE ∗ f ;
i n t i , n ; double a ;
f=f o p e n ( " f i l e . d a t " , " rb " ) ;
f o r ( i =0; i <15; f r e a d (&a , s i z e o f ( double ) , 1 , f ) , i ++) ;
f c l o s e ( f ) ;
f=f o p e n ( " f i l e . d a t " , " rb " ) ;
f r e a d (&a , s i z e o f ( double ) , 1 , f ) ;
f c l o s e ( f ) ;
Как видно, такое чтение чисел из файла, а затем повторное открытие файла —
не самый удачный способ. Гораздо удобнее использовать функцию перемещения
указателя файла
к заданному байту:
int fseek(FILE *F, long int offset, int origin);
Функция устанавливает указатель текущей позиции файла F, в соответствии
со значениями начала отсчёта origin и смешения offset. Параметр offset ра-
вен количеству байтов, на которые будет смещён указатель файла относительно
начала отсчёта, заданного параметром origin. Если значение offset положи-
тельно, то указатель файла смещается вперёд, если отрицательно — назад. Па-
раметр origin должен принимать одно из следующих значений, определённых
в заголовке stdio.h:
SEEK_SET
— отсчёт смещения offset вести с начала файла;
SEEK_CUR
— отсчёт смещения offset вести с текущей позиции файла;
SEEK_END
— отсчёт смещения offset вести с конца файла.
Функция возвращает нулевое значение при успешном выполнении операции и
ненулевое, если возник сбой при выполнении смещения.
Функция fseek фактически реализует прямой доступ к любому значению
в файле. Необходимо только знать месторасположение (номер байта) значения
в файле. Рассмотрим использование прямого доступа в двоичных файлах на
примере решения следующей задачи.
Задача 7.6.
В созданном в задаче 7.4 двоичном файле abc.dat поменять местами
наибольшее и наименьшее из вещественных чисел.
Алгоритм решения задачи состоит из следующих этапов:
1. Чтение вещественных чисел из файла в массив a.
2. Поиск в массиве a максимального (max) и минимального (min) значения и
их номеров (imax, imin).
3. Перемещение указателя файла к максимальному значению и запись min.
4. Перемещение указателя файла к минимальному значению и запись max.
Ниже приведён текст программы решения задачи с комментариями.
#include 
#include 
using namespace s t d ;
i n t main ( )
{
FILE ∗ f ; //Описание файловой переменной.
i n t i , n , imax , imin ;
double ∗a , max , min ;
f=f o p e n ( " a b c . d a t " , " rb + " ) ; //Открыть файл в режиме чтения и записи.
f r e a d (&n , s i z e o f ( i n t ) , 1 , f ) ; //Считать из файла в переменную n количество элементов в
файле.
a=new double [ n ] ; //Выделить память для хранения вещественных чисел,
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


240
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   98   99   100   101   102   103   104   105   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish