Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція №10 Файли вводу-виводу мови C Full.doc
Скачиваний:
3
Добавлен:
22.11.2018
Размер:
99.33 Кб
Скачать

Закриття файлу: fclose(in ) ;

Просто використовуйте функцію fclose( ). Помітимо, що аргументом її є in, вказівник на файл, а не test, ім'я файлу.

Для програми, більш серйозної, чому ця, варто було б подивитися, чи успішно закритий файл. Функція fclose( ) повертає значення 0, якщо файл закритий успішно, і - 1 а якщо ні, то.

Ми розглянемо функції вводу/виводу, призначені тільки для роботи з текстовими файлами.

Функція feof() повертає 0, якщо кінець файлу не досягнуто й ненульове значення а якщо ні, то.

Ввод/вивід файлу: getc( ) і putc( ) (stdio.H)

Дві функції getc( ) і putc( ) працюють аналогічно функціям getchar( ) і putchar( ). Різниця полягає в тому, що потрібно вказати в параметрі, який файл слід використовувати.

ch = getchar( );

призначений для одержання символу від стандартного вводу, а

ch = getc (in);

для одержання символу від файлу, на який указує in. Аналогічно функція

putc(ch, out);

призначена для запису символу ch у файл, на який посилається вказівник out типу FILE. У списку аргументів функції putc( ) цей символ коштує першим, а потім вказівник файлу.

putchar(ch);

У файлі stdio.h. визначає в директиві #define вказівники stdout і stdin на стандартний Вивід і стандартне вводу системи.

#include <stdio.h>

main( )

{

FILE *in; /* описую вказівник на файл */

int ch;

if ( (in = fopen(" test", "r")) != NULL)

{

while ( (ch = getc(in) != EOF) /* одержую символ з in */

putc(ch, stdout); /* посилаю на стандартний Вивід */

fclose(in); /* закриваю файл */

}

else

рrintf ("я не змогла відкрити файл \"test\" .\n");

}

Ввід/вивід файлу: fprintf(), fscanf(), fgets() и fputs()

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

Функції fprintf( ) і fscanf( )Ці функції вводуввиводу працюють майже як printf() і scanf(), але їм потрібний додатковий аргумент для посилання на сам файл. Він є першим у списку аргументів.

/* зразок використання fprintf( ) і fscanf( ) */

#include <stdio.h>

main( )

{

FILE •fi;

int age;

fi = fopen ("sam", "г"'); /* зчитування */

fscanf( fi, " %d", &age); /• fi указує на sam */

fclose(fi);

fi = fopen (“data", " a"); /* доповнення */

fprintf ( fi, "sam is %d.\n”, age); /'* fi указує на data */

fclose(fi); }

Фрагмент 2

if((fp=fopen("F.txt","r"))!=NULL)

{

while(fscanf(fp,"%d %s ",&j,str)!=EOF)

cout<<"j="<<j<<"str="<<str;

}

Помітимо, що можна було використовувати fi для двох різних файлів, тому що ми закрили перший файл, перш ніж відкрити другий. На відміну від getc() і putc() ці дві функції одержують вказівник типу FILE у якості першого аргументу. Дві інші, описані нижче, одержують його як останній аргумент.

Функція fgets()

Ця функція має три аргументи, у той час як gets() має один.

#include <stdio.h>

#define MAXLIN 80

main( )

(

FILE *fl;

char *string[MAXLIN];

fl = fopenf (“story", " r");

while ( fgets(string, MAXLIN, fl) != NULL) puts(string);

}

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

Другий аргумент містить граничну довжину зчитуваного рядка. Функція припиняє роботу після зчитування символу нового рядка або після зчитування символів загальним числом MAXLIN - 1 ( залежно від того, що відбудеться раніше). У кожному разі нуль-символ ('\0') додається в самий кінець рядка.

Третій аргумент указує на файл, який буде читатися.

Різниця між gets() і fgets () полягає в тому, що gets() заміняє символ нового рядка на ' \0', у той час як fgets() зберігає символ нового рядка, якщо він був прочитаний.

Подібно gets( ) функція fgets( ) повертає значення NULL, якщо зустрічає символ EOF. Це дозволяє перевірити досягнення кінця файлу.