Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Читання / запис двійкових даних, функції fread(), fwrite()Содержание книги
Поиск на нашем сайте Як зберегти числові дані у файлі? 1. можна використати frintf() і “%f” для речовинних чисел, але потім ці значення однаково будуть збережений як рядок. наприклад: float n=1./3. frintf(fp,”%f”,n) // ця функція збереже 1/3 як рядок символів 0.333333 (8 б.), Тоді при зчитуванні цих даних з файлу fp потрібно буде застосовувати в точності ті ж формати
2. Можна зберегти числа в такому ж виді, як це робить програма. Це роблять функції fread() і fwrite(). При цьому як числа, так і символи зберігаються у двійковому поданні(ASCII) int num=12345; // это двоичное число, в памяти(в двоичном формате) // пусть размер типа int = 2 байта
fprintf(fp,”%d”,num); \\сохраняет двоичные коды символов \\ '1', ‘2’, ‘3’, ‘4’, ‘5’ в файле:
fwrite(&num,sizeof(int),1,fp); // записывает 1 данное размером sizeof(int)(в нашем //случае это 2 байта) в файл fp из буфера по адресу //num
size_t fread (void *buffer, size_t size, size_t cout, FILE *stream); зчитує count елементів довжиною size байтів в область, задану покажчиком buffer з потоку stream;
size_t fwrite (const void buffer, size_t size, size_t n, file stream); записує n елементів довжиною довжиною size байтів з буфера, заданого покажчиком buffer у потік stream. Повертає число успішно записаних елементів звичайно воно = size, але при помилці воно може бути менше.
Тип size_t визначений у файлі stdio.h, означає «будь-який цілий». У байт, зайнятих цим «будь-яким цілим» можна одержати за допомогою функції sizeof(). Наприклад sizeof(int) - скільки байтів займає тип int.
Приклад: char buf[256]; // масив символів fwrite(buf,256,1,fp); // перед buf не ставиться &, тому що buf = &buf[0] int k[10]; // масив цілих fwrite(k,sizeof(int),10,fp);
У прототипах цих функцій використається void *buffer. Він діє у якості «пастки» для всіх типів даних.
Збереження структур у файлах.
Можна писати дані структур у файлі за допомогою frintf(). Але цей спосіб сам не ефективний його не розглядаємо. Будемо використати fread() і fwrite() для читання й запису у двійковому поданні (у такому ж, як і програма З) Структура складається із записів (запис - повний набір інформації, збереженої в 1 елементі структури). Окремі частини записів називаються полями.
Наприклад: struct book {char nazva[50]; char avtor[30]; float cena; } Нехай fp - покажчик на файл, а primer - змінна типу структури: file *fp; struct book primer; Тоді fwrite(&primer, sizeof(struct book),1,fp); //пише у файл fp всі поля запису //primer відразу, тобто пише у файл запис fread() з тими ж аргументами виконує зворотну операцію. ___________________________________________________________________
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 96; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.006 с.) |