- •Введення інформації
- •Функції файлового вводу-виводу. Текстові файли з буферизацією
- •Закриття файлу: fclose(in ) ;
- •Ввод/вивід файлу: getc( ) і putc( ) (stdio.H)
- •Ввід/вивід файлу: fprintf(), fscanf(), fgets() и fputs()
- •Функція fgets()
- •Функція fputs( )
- •Неформатований ввід/вивід.
- •Довільний доступ: fseek( )
Закриття файлу: 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. Це дозволяє перевірити досягнення кінця файлу.
