Перевірка ознаки кінця файлу 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Перевірка ознаки кінця файлу



Так як при кожній операції введення / виводу відбувається переміщення покажчика поточної позиції у файлі, в якийсь момент покажчик досягає кінця файлу. Структура типу FILE має поле - індикатор кінця файлу. Функція feof () перевіряє стан індикатора кінця файлу і повертає значення 0, якщо кінець файлу не був досягнутий, або значення, відмінне від нуля, якщо був досягнутий кінець файлу. Функція має єдиний аргумент - покажчик на потік типу FILE. Виклик функції:

if (! feof (f_in))...

перевіряє, що кінець файлу ще не досягнутий.

Закриття файлу

Після завершення обробки файлу його слід закрити за допомогою функції fclose (). При цьому розривається зв'язок покажчика на файл c зовнішнім набором даних. Звільнився покажчик можна використовувати для іншого файлу. Формат виклику функції:

fclose (f_in);

При нормальному завершенні програми в більшості операційних систем всі відкриті файли закриваються автоматично, але рекомендується закривати всі файли, подальша обробка яких в програмі не передбачається, за допомогою функції fclose ().

Питання для контролю:

1.Які є функції для читання даних з файлу?

2. Які є функції для запису даних в файл?

3. Яка команда перевіряє кінець файлу?

4. Як закрити файл?

Література:

1. 1.Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. – с. 319-345

Урок №41

(згідно робочої навчальної програми)

Тема:Запис текстових файлів, посимвольний запис.

Питання:

1.Функції введення-виведення

2. Робота з текстовими файлами

Функції введення-виведення

Найпростіший спосіб виконати читання з файлу або запис в файл - використовувати функції getc () або putc ().

Функція getc () вибирає з файлу черговий символ; їй потрібно тільки знати покажчик на файл, наприклад, char Symb = getc (f_in);

Якщо при обробці досягається кінець файлу, то функція getc () повертає значення EOF (end of file).

Функція putc () заносить значення символу Symb в файл, на який вказує f_out. Формат виклику функції: putc (Symb, f_out);

Робота з текстовими файлами

Приклад 1. Текст з файлу my_char.txt виводиться на екран. Якщо файл не знайдено, на екран виводиться повідомлення "File not found!":

# Include <stdio.h>

int main (void)

{

ch = getc (prt);

FILE * ptr;

unsigned char ch;

if ((ptr = fopen ("my_char.txt", "r"))! = NULL)

{ch = getc (ptr);

while (! feof (ptr))

{printf ("% c", ch);

ch = getc (prt);

}

fclose (ptr);

}

else printf ("\ nFile not found!");

return 0;}

У цьому прикладі для читання з файлу використовується змінна ptr. При відкритті файлу проводиться перевірка. Якщо змінній ptr присвоєно значення NULL, то файл не знайдений; на екран виводиться відповідне повідомлення, і програма завершується. Якщо ptr отримала ненульове значення, то файл відкритий. Далі виконується читання символів з файлу до тих пір, поки не буде досягнутий кінець файлу (! Feof (ptr)). Прочитані символи поміщаються в змінну ch, а потім виводяться на екран.

Приклад 2. Записати в файл букви, що вводяться з клавіатури. Введення продовжується до натискання клавіші F6 або CTRL / z (введення символу EOF - кінця файлу):

# Include <stdio.h>

int main (void)

{char c;

FILE * out;

out = fopen ("Liter", "w");

while ((c = getchar ())! = EOF)

fputc (c, out);

fclose (out);

return 0;

}

Функції fscanf () і fprintf () виконують форматоване введення / виведення. Читання з файлу виконує функція fscanf ():

fscanf (f_in, [рядок формату], [список адрес змінних]);

Функція повертає кількість введених значень або EOF.

Запис у файл здійснює функція fprintf ():

fprintf (f_out, [рядок формату], [список змінних, констант]);

Повертає кількість виведених байтів (символів) або EOF.

Слід зауважити, що виклик функції

fscanf (stdin, [рядок формату], [список адрес змінних]);

відповідає виклику

scanf ([рядок формату], [список адрес змінних]);

Аналогічно,

fprintf (stdout, [рядок формату], [список змінних, констант]);

еквівалентно

printf ([рядок формату], [список змінних, констант]);

Розглянемо приклади програм, що використовують ці функції.

Приклад 3. У програмі створюється масив, що складається з чотирьох цілих чисел. Вивести масив у файл:

# Include <stdio.h>

# Define n 4

int main ()

{

int i = 0;

int array [n] = {4,44,446,4466};

FILE * out;

out = fopen ("num_arr.txt", "w");

for (; i <n; i + +)

fprintf (out, "% 6.2d", array [i]);

fclose (out);

return 0;

}

Приклад 4. Є файл даних, що містить цілі числа, розділені пробілами. Кількість чисел у файлі невідомо. Потрібно знайти середнє арифметичне значення цих чисел:

# Include <stdio.h>

int main ()

{

int S = 0, count = 0, numb;

FILE * in;

if ((in = fopen ("num_arr.txt", "r"))! = NULL)

{ while (! feof (in))

{

fscanf (in, "% d", & numb);

S + = numb;

count + +;

printf ("% d \ n", numb);

}

double aver = (double) S / count;

printf ("Average =% lf \ n", aver);

fclose (in);

}

else

printf ("\ nФайл не знайдений!");

return 0;

}

Читання чисел з файлу виконується в змінну numb до тих пір, поки не буде досягнуто кінець файлу. Одночасно ведеться підрахунок кількості прочитаних символів у змінній count та накопичення суми прочитаних чисел у змінній S. Змінні S і count цілі, тому для правильного обчислення середнього арифметичного, необхідно виконати перетворення однієї з цих змінних в формат double

Питання для контролю:

1. Що робить команда getc ()?

2. Для чого використовується команда putc ()

3. Який синтаксис команди fscanf ()?

4. Що робить команда fprintf()?

Література:

1. Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. – с. 345-370

Урок №44

(згідно робочої навчальної програми)

Тема:Функція printf() і родинні з нею функції.

Питання:

1. Функція форматованого виведення printf ()

2. Основні формати

3.Модифікації форматів

Функція форматованого виведення printf ()

Структура (синтаксис) звернення до функції:

printf ("рядок формату", арг1, арг2,..., аргN);

В якості аргументів функції арг1... аргN використовуються ідентифікатори змінних або вирази. Список аргументів може бути порожнім.

Рядок формату записується в подвійних лапках і може містити:

будь-який текст;

специфікатори форматів (за кількістю аргументів), позначаються символом%, містять інформацію про тип виведеного значення і його модифікації;

керуючі символи.

Нагадаємо, що керуючий символ, або ESC-послідовність, формується з символу зворотної похилої риси \, званого в мові C escape-символом, і латинської літери. Приклади керуючих послідовностей наведені в п. 1.3.1.

Основні формати

Кожному аргументу повинен відповідати тільки один специфікатор формату. Вид формату визначається типом аргументу.

Цілі числа:

% D - аргумент розглядається як ціле 10-тичного число зі знаком;

% U - ціле 10-тично без знака;

% X - 16-річної ціле без знаку;

% O - 8-річно ціле без знаку.

Речові числа:

% F - аргумент записується у формі дійсного числа з фіксованою крапкою (наприклад, 0.036);

% E - аргумент записується у формі числа з плаваючою точкою.

Символи і рядки:

% C - аргумент розглядається як значення типу char, і на екран виводиться один символ;

% S - аргумент розглядається як рядок.

Повернемося до програми "двічі два" і додамо в неї вивід результату на екран:

# Include <stdio.h>

int main (void)

{

float x = 2., y;

y = x * x;

printf ("\ n y (% f) =% f", x, y);

return 0;}

Керуюча рядок містить ESC-символ перекладу рядка '\ n', текст і два специфікатора формату (% f): перший для аргументу x, другий - для аргументу y.

Виклик функції printf () можна записати і в іншому вигляді, включивши в неї обчислення виразу:

# Include <stdio.h>

int main (void)

{

float x2.;

printf ("\ n y (% f) =% f", x, x * x);

return 0;}

В результаті на екрані: y (2.000000) = 4.000000.

Модифікації форматів

Специфікатори формату цілих чисел можна записати у вигляді:

% Nd,% Nu,% No,% Nx,

де N - натуральне число, що визначає кількість позицій, що відводяться під значення числа (ширина поля виведення).

Для форматів дійсних чисел специфікатор формату представляється у вигляді:

% N.Mf або% N.Me,

де N і M - натуральні числа, що визначають загальне число позицій, відведених під число, N (ширина поля виведення) і число знаків у дробовій частині M (точність відображення).

Модифікуємо формати в нашому прикладі:

# Include <stdio.h>

int main (void)

{

float x = 2.;

printf ("\ n y (% 4.1f) =% 6.2f", x, x * x);

return 0;

}

Результат на екрані: y (2.0) = 4.00.

Зауважимо, що відповідно до використовуваних форматами для значення змінної x відведено 4, а для y - 6 позицій. Це знаходить своє відображення і на екрані, тобто після відкриваючої круглої дужки присутній один пробіл (саме значення x займає 3 позиції), а після знаку рівності - 2 пробілу (y займає 4 позиції).

При неправильно заданому форматі, коли ширина поля виведення виявляється менше, ніж необхідно для представлення значення змінної, компілятор мови додає відсутні позиції, виправляючи помилку програміста.

Аналогічно можна форматувати висновок символьних рядків:% N.Ms, тут в специфікатор перетворення N - ширина поля виведення рядка, M - максимальна кількість виведених на екран символів.

Наприклад, при виконанні оператора

printf ("% 4s% 3d% 7.3s \ n", "Вартість", 1400, "рублів");

на екрані буде виведена наступна інформація:

Вартість (1 пробіл) 1400 (5 пробілів) руб

Питання для контролю:

1. Що робить команда printf()?

2. Що може містити рядок функції printf(), що знаходиться в лапках?

3. Які основні формати для функції printf()?

4. Які є модифікації форматів?

Література:

1. Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. – с. 302-305

Урок №45

(згідно робочої навчальної програми)



Поделиться:


Последнее изменение этой страницы: 2016-08-10; просмотров: 303; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.40.207 (0.027 с.)