Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Читання / запис двійкових даних, функції fread(), fwrite()⇐ ПредыдущаяСтр 14 из 14
Як зберегти числові дані у файлі? 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; просмотров: 40; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.70.191 (0.007 с.) |