МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Файловий обмін рядками символів
Зчитування рядка символів з потоку введення виконує функція
char* fgets (char* str, int max, FILE* fp);
На відміну від gets (), дана функція має три параметри: перший - str вказує на масив символів, в який буде записано введений рядок; другий - max задає максимальну кількість символів (з нуль-символом включно), яку може містити зчитаний рядок; останній параметр - fp вказує на потік, з якого вводяться рядки. У разі успішного виконання функція fgets () повертає адресу першого символа введеного рядка, тобто str, а в разі невдачі, зокрема, якщо досягнуто кінця файла, вказівник NULL. Параметр str має вказувати на ділянку оперативної пам'яті, обсяг якої достатній для збереження зчитаного рядка. Параметр max обмежує кількість символів, які вводяться з потоку, тому розмір масиву str має бути не меншим за max. Дія функції така: з потоку fp у ділянку оперативної пам'яті, на яку вказує str, зчитується послідовність символів до символу нового рядка чи символу кінця файлу, але не більше, ніж mах-1 символів. Якщо в процесі введення зчитується символ '\n', то він заноситься у str, за ним записується '\0' і процес введення припиняється. У протилежному разі в str послідовно заноситься mах-1 символів потоку, за якими записується нуль-символ. Запис заданого рядка в потік виведення здійснює функція
int fputs (char* str, FILE* fp); яка повертає ненульове значення за умови успішного виконання та EOF у разі невдачі.
У процесі виконання fputs () послідовно передає у потік fp символи рядка str до '\0'. Сам нуль-символ у потік не записується і не перетворюється в інші символи Якщо в рядку зустрічається символ нового рядка, а потік виведення текстовий то замість символу “\n” у потік записується комбінація символів "\r\n". Для бінарних потоків жодні заміни символів не виконуються.
Наведемо приклад використання функцій введення/виведення символьних рядків для посторінкового роздруку заданого файлу. У програмі виконується підрахунок кількості рядків, виведених на екран. Після відтворення сторінки тексту встановленого розміру, читання з файлу затримується до натискання на довільну клавішу.
/* Посторінкове виведення текстового файла */
#include <stdio.h> #include <conio.h> /* для функцій clrscr() і getch() */ #define LEN 81 /* розмірність буфера рядків тексту */ #define NROWS 22 /* розмір сторінки виведення */ int main () FILE * f ; char buf[LEN]; char fname [] = "newtext.txt"; int n = 0 ; if ( (f = fopen(fname, "rt")) =-= NULL) { printf("\n\t Файл %s не знайдено\n", fname); return 0; } clrscr(); /* очищення екрана */ n = 0; while (fgets (buf, LEN, f) != NULL) { fputs(buf, stdout); /* відображення зчитаного рядка */
if (++n % NROWS == 0) { /* заповнено сторінку */ printf("\n\t\t Page %d \n", NROWS); getch (); /* затримка зображення */ } } printf("\n\t\t End of file. \n"); getch (); fclose (f); return 0; }
У цій програмі розмірність рядка введення LEN дорівнює розміру екранного рядка -80 символів (плюс байт на ‘\0’), що полегшує підрахунок кількості висвітлених на екрані рядків.
Для виведення символьних рядків попередня програма використовує функцію
fputs(buf, stdout); щоб відобразити на екрані текст так, як він записаний у файлі.
Якби виведення зчитаних з файлу рядків виконувалось функцією puts (buf), то після кожного рядка, що завершується символом “\n”, на екран додатково виводився б порожній рядок, оскільки puts () замінює кінцевий нуль-символ стрічки символом “\n”. Читайте також:
|
||||||||
|