МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Обмін блоками даних
Функціїfread() та fwrite (). Зчитати з потоку блок даних заданого розміру можна за допомогою функції
size_t fread (void* buf, size_t size, size_t n, FILE* fp);
що заносить у буфер, адресу якого задає параметр buf, n об'єктів, кожен з яких має розмір size. Тип size_t оголошено в <stdio.h> через декларацію typedef. У Borland C він збігається з типом unsigned int. Функція fread () повертає кількість реально зчитаних об'єктів (не байтів). Якщо ця величина не дорівнює заданому значенню n, то це означає, що досягнуто кінця файлу або зафіксовано помилку читання. Уточнити причину неповного зчитування блоку можна за допомогою функцій feof () та ferror (), які опишемо далі.
Використання функції fread () проілюструємо прикладом програми, яка визначає середньоарифметичне значення набору дійсних чисел, бінарні коди яких зберігаються у файлі attempj.dat, зареєстрованому в каталозі C:\EXPRDATA. Дані з файлу зчитуються в буфер блоками по N чисел. Процес роботи з файлом завершується, коли розмір зчитаного блоку менший за N, що сигналізує про досягнення кінця файлу. /*****************************************************************************/ /* Визначення середньоарифметичного значення послідовності */ /* дійсних чисел, що зберігається у заданому бінарному файлі */ /*****************************************************************************/ #include <stdio.h> #define N 1000 /* розмір блоку даних */ double buf[N]; int main (void) { FILE *fd; char fname[]="C:\\EXPRDATA\\attempj.dat"; double sum; unsigned n, k, i; if ( (fd=f open (fname, "rb") )== NULL) /* бінарний режим обміну */ { printf("\n\t Файл %s не знайдено \n", fname); return 0; }
sum=0; k=0; /* сума і кількість введених з файлу чисел */ do { n = fread(buf, sizeof(double), N, fd) ; k+=n;
for (i = 0; i<n; i++) sum+=buf[i]; /* сумування чисел введеного блоку */ } while (n == N); printf("\n Середнє значення %u елементів файла %s => %.31f\n", k, fname, sum/k); fclose (f); return 0; }
Запис блоку даних у потік виконує функція
size_t fwrite (void* buf, size_t size, size_t n, FILE* fp);
Параметри цієї функції такі ж, як і в функції fread(): buf - вказівник на ділянку оперативної пам'яті, звідки зчитуються дані; size - розмір одного даного; n - кількість даних, що мають бути записані у файл (потік); fp - вказівник потоку виведення.
Функціїgetw() та putw(). Бібліотека системи програмування Borland C додатково включає дві функції: getw () і putw (). Перша з них призначена для зчитування з бінарного файлу двобайтового двійкового коду цілого числа. Друга функція записує в файл, відкритий у бінарному режимі, внутрішній двійковий код заданого цілочислового значення. Ці функції оголошені в <stdio. h> наступним чином:
int getw (FILE* fp); int putw (int numb, FILE* fp);
У разі успішного виконання обидві функції повертають значення зчитаного або відповідно записаного числа, а в разі виникнення помилки - макроконстанту EOF. Подана нижче функція FindNumber () здійснює пошук заданого числа number у відкритому файлі, заповненому бінарними кодами цілих чисел. Пошук розпочинається з поточної позиції файлу. Функція повертає порядковий номер number або 0, якщо такого числа у файлі немає (припускаємо, що number не дорівнюватиме EOF).
Приклад:
/* Функція пошуку заданого цілого числа в бінарному файлі */
long FindNumber (FILE* fb, int number) { int rnum; long k = 0; do { rnum = getw(fb); k++; /* зчитування числа */ if (rnum == number) return k; /* число знайдено */
} while (rnum !=EOF); return 0; /* задане число відсутнє */
}
Читайте також:
|
||||||||
|