МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Посимвольний обмін данимиФункції потокового введення/виведення даних
Функції високорівневого обміну даними з файлами можна поділити на чотири групи відповідно до формату даних, що передаються за одну операцію читання/запису:
• функції посимвольного введення/виведення; • функції рядкового введення/виведення; • функції блокового введення/виведення; • функції форматного введення/виведення.
Всі операції введення/виведення даних виконуються, починаючи з поточної позиції файлу, яку зберігає спеціальний вказівник. У процесі введення цей покажчик автоматично зсувається на відповідну кількість байтів у напрямку до кінця потоку і встановлюється на перший ще непрочитаний байт. У процесі виведення даних покажчик поточної позиції файлу автоматично встановлюється за останнім записаним байтом.
Введення одного символу. Основною функцією зчитування одного символу з потоку введення fp є функція int fgetc (FILE* fp); У разі успішного виконання функція fgetc () повертає код зчитаного символу як значення з типом unsigned char, розширене до формату int. Якщо ж читання з потоку недоступне, зокрема через досягнення кінця файлу, то функція повертає макро-константу EOF.
Такі ж дії виконує функція int getc (FILE* fp); яку в середовищі Borland C та в ряді інших систем програмування оголошено як макрос, що викликає функцію fgetc (). Якщо параметром названих функцій є стандартний потік введення stdin, то їх дія повністю збігається з дією функцій введення символів з клавіатури fgetchar () і getchar (). Результат виклику кожної з чотирьох наступних функцій однаковий:
fgetc(stdin) = getc(stdin) = fgetchar() = getchar();
- зчитування одного символа, введеного з клавіатури і записаного в буфер стандартного потоку введення (якщо потік stdin попередньо не перескерували). Функція int ungetc (int symb, FILE* fp); дає змогу повернути в потік введення fp останній зчитаний символ. Після повернення symb стає першим символом потоку, його буде зчитано довільною наступною операцією введення. Функція ungetc () повертає код символа symb у разі успішного завершення, а у разі невдачі - значення EOF. Наведемо приклад функції, яка реалізує зчитування послідовності цифрових символів зі заданого відкритого потоку frd та запис введених цифр за адресою numbst. Робота функції завершується, коли зчитується символ, який не є цифрою - цей символ функція повертає назад у потік.
/* Функція введення послідовності цифрових символів */ #include <stdio.h> #include <ctype.h> char* ReadNumber (char* numbst, FILE* frd) { char * pn = numbst; int symb; while (isdigit (symb = getc( frd))) /* isdigit – повертає числові значення 0 - 9 *pn++ = symb; /* запис цифрових символів у numbst *pn = '\0'; /* кінець числового рядка ungetc (symb, frd); /* повернення нечислового символа return numbst; }
Запис символа у файл. Запис заданого символа symb у потік виведення fp виконують функції
int fputc (int symb, FILE* fp); та int putc (int symb, FILE* fp);
Другу з цих функцій у Borland C реалізовано як макрос. Обидві функції за умови успішного виконання повертають код записаного символу. У разі помилки звертання до файлу функції повертають значення макроконстанти EOF.
Проілюструємо використання функцій посимвольного потокового введення ведення прикладом програми, яка відображає на екрані весь вміст текстового файлу
/******************************************************************/ /* Посимвольне виведення вмісту заданого файлу */ /******************************************************************/ #include <stdio.h> #include <string.h> int main (int argc, char** argv) { FILE * fp; char fname[50]; int c; if (argc == l) { /* ім'я файла у командному рядку не задано */ printf("Ім\'я файла: "); gets(fname); } else strcpy(fname, argv[1]); /* ім'я зчитується з командного рядка */ fp = fopen(fname,"r"); if (fp == NULL) { printf ("Хибне ім\'я файла - %s \n", fname); return 0; } while ((c = getc(fp) ) != EOF) /* цикл зчитування файла */ putc(c, stdout); /* посимвольне відображення на екрані */ fclose(fp); return 0; } Наведена вище програма дає змогу задати ім'я файлу з командного рядка або ввести його в процесі виконання програми. Хоча зчитування файлу здійснюється посимвольно, все ж програма забезпечує високу швидкодію обміну, оскільки реально символи зчитуються не з файлу на зовнішньому носії, а з буфера введення в оперативній пам'яті.
Недолік програми в тому, що для великих за розміром файлів на екрані збережеться тільки остання сторінка тексту, а всі решта будуть витерті автоматичним скролінгом. Приклад посторінкового виведення файлу подано далі.
Відображення символів, зчитаних з файлу, у програмі реалізовано як посимвольне виведення у стандартний потік stdout. Загалом, виведення символу symb на екран (або в файл, якщо stdout попередньо перескерували) можна виконати кожним із чотирьох наступних викликів функцій:
fputc(symb, stdout); putc(symb, stdout); fputchar(symb); putchar(symb);
Читайте також:
|
||||||||
|