Функции ввода-вывода данных файла

1) Символьный ввод-вывод

Для символьного ввода-вывода используются функции:

int fgetc(FILE *fp);

где fp – указатель на поток, из которого выполняется считывание.

Функция возвращает очередной символ в формате int из потока fp. Если символ не может быть прочитан, то возвращается значение EOF.

int fputc(int c, FILE*fp);

где fp – указатель на поток, в который выполняется запись;

c – переменная типа int, в которой содержится записываемый в поток символ.

Функция возвращает записанный в поток fp символ в формате int. Если символ не может быть записан, то возвращается значение EOF.

Пример 2.

#include <stdio.h>

void main() {

FILE *f;

char c;

char *filename="t.txt";

if ((f=fopen(filename,"r"))==0)

perror(filename);

while (c=fgetc(f)!=EOF)

putchar(c);// вывод с на стандартное устройство вывода

fclose(f);

}

2) Строковый ввод-вывод

Для построчного ввода-вывода используются следующие функции:

char *fgets(char *s, int n, FILE *f);

где char *s – адрес, по которому размещаются считанные байты;

int n – количество считанных байтов;

FILE *f – указатель на файл, из которого производится считывание.

Прием байтов заканчивается после передачи n-1 байтов или при получении управляющего символа '\n'. Управляющий символ тоже передается в принимающую строку. Строка в любом случае заканчивается '\0'. При успешном завершении считывания функция возвращает указатель на прочитанную строку, при неуспешном – 0.

int fputs(char *s, FILE *f);

где char *s – адрес, из которого берутся записываемые в файл байты;

FILE *f – указатель на файл, в который производится запись.

Символ конца строки ('\0') в файл не записывается. Функция возвращает EOF, если при записи в файл произошла ошибка, при успешной записи возвращает неотрицательное число.

 

Пример 3. Построчное копирование данных из файла f1.txt в файл f2.txt.

#include <stdio.h>

#define MAXLINE 255 //максимальная длина строки

void main() {

//копирование файла in в файл out

FILE *in, //исходный файл

*out; //принимающий файл

char buf[MAXLINE];

//строка, с помощью которой выполняется копирование

in=fopen("f1.txt","r");

//открыть исходный файл для чтения

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

//открыть принимающий файл для записи

while(fgets(buf, MAXLINE, in)!=0)

//прочитать байты из файла in в строку buf

fputs(buf, out);

//записать байты из строки buf в файл out

fclose(in); //закрыть исходный файл

fclose(out);//закрыть принимающий файл

}

 

3) Блоковый ввод-вывод

Для блокового ввода-вывода используются функции:

int fread(void *ptr, int size, int n, FILE *f);

где void *ptr – указатель на область памяти, в которой размещаются считанные из файла данные;

int size – размер одного считываемого элемента;

int n – количество считываемых элементов;

FILE *f – указатель на файл, из которого производится считывание.

В случае успешного считывания функция возвращает количество считанных элементов, иначе – EOF.

int fwrite(void *ptr ,int size, int n, FILE *f);

где void *ptr – указатель на область памяти, в которой размещаются считанные из файла данные;

int size – размер одного записываемого элемента;

int n – количество записываемых элементов;

FILE *f – указатель на файл, в который производится запись.

В случае успешной записи функция возвращает количество записанных элементов, иначе – EOF.

Пример 4.

#include <stdio.h>

struct Employee {char name[30];

char title[30];

float rate;

};

void main(){

Employee e;

FILE *f;

if((f=fopen("text.dat","w"))==NULL) {

printf("\nФайл не открыт для записи");

}

int n;

//запись в файл

printf("\nВведите количество записей N=");

scanf("%d",&n);

for(int i=0;i<n;i++) {

//формируем структуру е

printf("имя:");scanf("%s",&e.name);

printf("наименование:");scanf("%s",&e.title);

printf("налог:");scanf("%f",&e.rate);

//записываем переменную е в файл

fwrite(&e,sizeof(Employee),1,f);

}

fclose(f);

//чтение из файла

if((f=fopen("f.dat","rb"))==NULL)

printf("\nФайл не открыт для чтения");

while(fread(&e,sizeof(Employee),1,f))

printf("%s, %s, %f;\n", e.name, e.title, e.rate);

fclose(f);

}

 

4) Форматированный ввод-вывод

В некоторых случаях информацию удобно записывать в файл без преобразования, т.е. в символьном виде, пригодном для непосредственного отображения на экран. Для этого можно использовать функции форматированного ввода-вывода:

int fprintf(FILE *f, const char *fmt, ...);

где FILE*f – указатель на файл, в который производится запись;

const char *fmt – форматная строка;

... – список переменных, которые записываются в файл.

Функция возвращает число записанных символов.

int fscanf(FILE *f, const char *fmt, par1, par2, ...);

где FILE*f – указатель на файл, из которого производится чтение;

const char *fmt – форматная строка;

par1, par2, ... – список переменных, в которые заносится информация из файла.

Функция возвращает число переменных, которым присвоено значение.

Пример 5.

#include<stdio.h>

void main() {

FILE *f;

int n, nn,m;

if((f=fopen("int.dat","w"))==0)

perror("int.txt");

for(n=1;n<11;n++)

fprintf(f, "\n%d %d", n, n*n);

fclose(f);

if ((f=fopen("int.dat","r"))==0)

perror("int.txt");

m=1;

while(fscanf(f, "%d %d",&n, &nn)&& m++<11)

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

fclose(f);

}

 








Дата добавления: 2015-02-16; просмотров: 755;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.