Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

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

Функции, работающие с символами и строками, предназначены только для чтения и записи текста. Если требуется записать или прочитать из файла, либо отпечатать на принтере данные, содержащие числовые значения, вы должны использовать функции fprintf() и fscanf(). Для записи инструкций с этими функция- ми используется тот же синтаксис, что и для функций printf() и scanf(), но в этом случае требуется еще включить указатель на файл, чтобы определить, куда следует записать или откуда читать данные:

fprintf(file_pointer, control_string, data_list); fscanf(file_pointer, control_string, data_list);

Программа, приведенная в Листинге 12.3, предназначена для ввода и записи в файл данных инвентарной описи. Первый ввод осуществляется с помощью функции gets() перед началом цикла while. Цикл повторя- ется, пока длина каждого вводимого имени составляет как минимум один символ. Выполнение цикла пре- кращается, когда вместо ввода значения имени происходит нажатие клавиши Enter.

Листинг 12.3. Форматированный вывод.

/*fprintf.c*/

#include "stdio.h" main()

{

FILE *fp; char name[20]; int quantity; float cost;

if ((fp = fopen("MYFILE", "w")) == NULL)

{

puts("Невозможно открыть файл"); exit();

}

printf("Введите наименование товара: "); gets(name);

while (strlen(name) > 0)

{

printf("Введите цену товара: "); scanf("%f", &cost); printf("Введите количество

единиц товара: ");

cost, quantity);

fclose(fp);

}

scanf("%d", &quantity); fprintf(fp, "%s %f %d\n", name,

printf("Введите наименование товара: "); gets(name);

}

Обратите внимание, что в последней строке цикла происходит ввод следующего имени. Это позволяет прекратить повторение цикла простым нажатием клавиши Enter. Некоторые начинающие программисты, вероятно, написали бы этот цикл таким образом:

do

{

printf("Введите наименование товара: "); gets(name);

printf("Введите цену: "); scanf("%f", &cost);

printf("Введите количество единиц товара: "); scanf("%d", &quantity);

fprintf(fp, "%s %f %d\n", name, cost, quantity);

}

while (strlen(name) > 0);

и эта программа работала бы столь же успешно, не считая того, что для окончания цикла требовалось бы нажать клавишу Enter трижды: первый раз при вводе названия и еще два раза в ответ на просьбу ввести цену и количество товара.

Внутри цикла while данные о цене и количестве каждого наименования товара вводятся с использованием функции scanf(), а затем записываются на диск с помощью инструкции

fprintf(fp, "%s %f %d\n", name, cost, quantity);

Обратите внимание, что код «новая строка» записывается в файл в конце каждой строки. Если просмот- реть содержимое файла с помощью команды TYPE операционной системы MS-DOS, то каждая строка ин- вентарной описи и на экране будет начинаться с новой строки: