![](/user_photo/2706_HbeT2.jpg)
Лысаков. Основы программирования
.pdfОдним из самых полезных применений функций fread() и fwrite() является чтение и запись данных пользовательских типов, особенно структур. Например, если определена структура:
struct struct_type
{
float balance; char name[80];
} cust;
то следующий оператор записывает содержимое cust в файл, на который указывает fp:
fwrite(&cust, sizeof(struct struct_type), 1, fp);
7.15. Функции fprinf() и fscanf()
Кроме основных функций ввода/вывода, о которых шла речь, в системе ввода/вывода языка С также имеются функции fprintf() и fscanf(). Эти две функции, за исключением того, что предназначены для работы с файлами, ведут себя точно так же, как и printf() и scanf(). Прототипы функций fprintf() и fscanf() следующие:
int fprintf(FILE *файл, const char *строка, ...); int fscanf(FILE *файл, const char *строка, ...);
Операции ввода/вывода функции fprintf() и fscanf() выполняют с тем файлом, указанным в параметрах функции.
В качестве примера предлагается рассмотреть следующую программу, которая читает с клавиатуры строку и целое значение, а затем записывает их в файл на диске; имя этого файла — test. После этого программа читает
www.phys.nsu.ru
этот файл и выводит информацию на экран. После запуска программы проверьте, каким получится файл test. Как вы и увидите, в нем будет вполне удобочитаемый текст.
#include <stdio.h> #include <io.h> #include <stdlib.h>
void main(void)
{
FILE *fp; char s[80]; int t;
if((fp=fopen("test", "w")) == NULL)
{
printf("Error\n"); return;
}
printf("Введите строку и число: ");
/* читать с клавиатуры */ fscanf(stdin, "%s%d", s, &t);
/* писать в файл */ fprintf(fp, "%s %d", s, t); fclose(fp);
if((fp=fopen("test","r")) == NULL)
{
printf("Error\n"); return;
}
fscanf(fp, "%s%d", s, &t); fprintf(stdout, "%s %d", s, t);
}
101 |
102 |
Маленькое предупреждение. Хотя читать разносортные данные из файлов на дисках и писать их в файлы, расположенные также на дисках, часто легче всего именно с помощью функций fprintf() и fscanf(), но это не всегда самый эффективный способ выполнения операций чтения и записи. Так как данные в формате ASCII записываются так, как они должны появиться на экране (а не в двоичном виде), то каждый вызов этих функций сопряжен с определенными накладными расходами. Поэтому, если надо заботиться о размере файла или скорости, то, скорее всего, придется использовать fread() и fwrite().
www.phys.nsu.ru
Учебное издание
Лысаков Константин Федорович
СТРУКТУРНЫЙ И ОБЪЕКТНО-БАЗИРОВАННЫЙ ПОДХОДЫ В ПРОГРАММИРОВАНИИ НА ПРИМЕРЕ ЯЗЫКОВ С И С++
УЧЕБНОЕ ПОСОБИЕ
103 |
104 |