Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лысаков. Основы программирования

.pdf
Скачиваний:
154
Добавлен:
06.06.2015
Размер:
1.71 Mб
Скачать

Одним из самых полезных применений функций 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