Направления программирования. История создания языка Си. Особенности языка, страница 24

Функция записывает <count> записей, каждая размером size байтов из области *buf в выходной поток stream. Указатель файла, связанный с потоком stream увеличивается на количество записанных байт. Функция возвращает количество явно помещенных в файл записей, т.е. если возвращаемое значение будет <count>, то была ошибка.

Неформатированное чтение данных из потока.

int fread(viod *buf, int size, int count, FILE *stream);

Функция читает <count> элементов данных, каждый размером size байт из выходного потока stream и помещает в область buf. Указатель файла увеличивается на число прочитанных байт. Функция возвращает количество реально прочитанных элементов, которое может быть<count>, если имела место ошибка, или встретился конец файла, раньше, чем было прочитано count элементов.

2.  Символьный ввод \вывод.

Чтение – запись символа.

-  int fgetc(FILE * stream) – функция читает один символ из указанного файла с текущей позиции, далее это значение приводится к типу int и указатель файла перемещается на следующий символ. Возвращает EOF, если произошла ошибка или достигнут конец файла.

-  int fputc(char ch, FILE *<имя файловой переменной>) – символ ch записывается в указанный выходной поток. Если запись произошла успешно возвращается значение ch целого типа, иначе EOF.

Чтение – запись строки.

-  char * fgets(char *s, int n, FILE * stream) – читает строку из указанного входного потока и помещает по адресу s. Символы читаются из файла до тех пор, пока не будет прочитан символ новой строки, который включается в строку s или пока не будет достигнут конец потока, или пока не будет прочитано (n-1) символов; результат помещается в строку s и завершается строка символом ‘\0’. Если считывание произошло успешно, то возвращается адрес строки s, иначе NULL.

-  int fputs(char *s, FILE *stream) – функция копирует строку s в указанный поток, причем ‘\0’ отбрасывается. Если при записи возникает ошибка, функция возвращает признак EOF, иначе последний записанный символ.

1.  Форматированный ввод\вывод.

Запись данных в поток по формату.

int fprintf(FILE *stream, char *<форматная строка>[,<аргумент>]);

Функция выполняет форматные преобразования данных, предназначенных для вывода и печати последовательности символов в выходной поток. Каждый аргумент преобразуется и выводится согласно формату преобразования, определенному в форматной строке.(Вид форматной строки  смотреть в функции printf) Функция возвращает количество выведенных символов.

Чтение из потока по формату.

int fscanf(FILE *stream, char * formatstring[,<аргумент>])

Функция читает данные из указанного входного потока, выполняет форматные преобразования и полученное значение записывает в переменные, адреса которых задаются последним параметром. Форматная строка имеет вид, что и у scanf. Функция возвращает количество успешно прочитанных элементов ввода, или признак EOF, если достигнут конец файла.

Пример:

Создать файл  результатов сдачи экзаменов группой студентов по определенному предмету.

#include<alloc.h>

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <dir.h>

struct stud

{char fio[20];

float reit;}        ;

char gr[8],course[20], *im_f;

FILE * ved;

struct stud st;

create(void)

{int kol, i;

float sum=0;

im_f=(char*)malloc(13);

printf("Имя файла ");gets(im_f);

ved=fopen(im_f,"w");

if(ved==NULL)return(-1);

printf("Группа:");gets(gr);

fprintf(ved,"Группа :%s\n",gr);

printf("Предмет:");gets(course);

fprintf(ved,"Предмет:%s\n",course);

printf("Кол-во студентов '');scanf("%d",&kol);

for(i=0;i<kol;i++)

{printf("Фамилия");scanf("%s",&st.fio);

printf("Оценка");scanf("%f",&st.reit);

sum+=st.reit;//сумма оценок для подсчета среднего бала группы

fprintf(ved,"%-2d %-20s %-5.2f\n",i=1,st.fio,st.reit);