Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_prog2_ru_2016_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
334 Кб
Скачать
☆

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

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

Функция форматированной записи (вывода) в файл имеет прототип:

Int fprintf(file *fp, char *format [,аргумент]…);

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

Пример. Запись чисел в открытый для записи файл через поток fp

FILE *fp=fopen("abc.txt","w");//открытие потока для записи

if(fp==NULL){puts("ошибка открытия файла"); return -1;}

int a=5; float b=3.56; long c=50000;

fprintf(fp,"%d %f %ld\n",a,b,c);

int arr[5]={1,2,3,4,5};

float mas[5]={1.1,2.2,3.3,4.4,5.5};

//запись массивов 5-и чисел типа int, float в файл

for(int i=0;i<5;i++)

fprintf(fp,"%d %f\n",arr[i],mas[i]);

Функция форматированного чтения (ввода) из файла имеет прототип:

Int fscanf(file *fp, char *format [,указатель]…);

Эта функция выполняет ввод из открытого файла данных с преобразо­ванием по формату и с занесением в ячейки памяти, определяемые ука­зателями. В случае успеха возвращает число обработанных при вводе полей (спецификаторов) или EOF (–1) в случае ошибки или достижения конца файла.

Пример. Чтение чисел из открытого для чтения файла через поток fp

freopen("data.txt","r",fp); //переоткрытие потока

if(fp==NULL){perror("Входной файл не открыт "); return 1;}

int n; float f; long l;

fscanf(fp,"%d %f %ld\n",&n,&f,&l);//чтение чисел из файла

printf("%d %f %ld\n",n,f,l); //вывод чисел на экран

int a[5]; float m[5];

//чтение из файла и вывод на экран массивов из 5-и чисел типа int, float

for(int j=0;j<5;j++)

{fscanf(fp,"%d %f\n",&a[j],&m[j]);

printf("%d %f\n",a[j],m[j]); }

fclose(fp);

2.6 Форматированные вывод в строку и ввод из строки

Не редко возникает необходимость форматированного вывода данных в строку и ввода данных из строки .

Функция форматированного записи (вывода) в строку имеет прототип:

int sprintf(char *buf, char *format [,аргумент]…);

Эта функция выводит данные с преобразованием по формату в строку buf. Последний символ устанавливается '\0'. В случае успеха возвра­щает число выведенных байтов (символов), а в случае ошибки – EOF.

Функция форматированного чтения (ввода) из строки имеет прототип:

int sscanf(char *buf, char *format [,указатель]…);

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

Пример. Запись чисел в строку и чтение чисел из строки

int a1=10; long b1=50000; char buf1[20];

sprintf(buf1,"a1=%d, b1=%ld",a,b);

puts(buf1);// a1=10, b1=50000

float e, pi; char buf2[25]="2.718281, 3.141592";

sscanf(buf2,"%f, %f",&e,&pi);

printf("e=%f pi=%f\n",e,pi); );//e=2.718281 pi=3.141592

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]