Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Закрытие потока




Ввод/вывод в поток

Ввод/вывод в поток можно осуществлять различными способами: в виде последовательности байтов, в виде символов и строк или с использованием форматных преобразований. Для каждого вида операций определен свой набор функций.

Операции ввода/вывода выполняются начиная с текущей позиции потока, определяемой положением указателя потока. Указатель устанавливается при открытии на начало или конец файла (в соответствии с режимом открытия) и изменяется автоматически после каждой операции ввода/вывода.

Ниже перечислены основные функции ввода/вывода потока.

· Чтение и запись потока байтов выполняют функции fread и fwrite.

· Чтение символа из потока — getc, fgetc, из стандартного потока stdin — getchar.

· Запись символа в поток — putc, fputc, в стандартный поток stdout — putchar.

· Чтение строки из потока — fgets, из стандартного потока stdin — gets.

· Запись строки в поток — fputs, в стандартный поток stdout — puts.

· Форматированный ввод из потока — fscanf, из стандартного потока stdin — scanf, из строки — sscanf.

· Форматированный вывод в поток — fprintf, в стандартный поток stdout — printf, в строку — sprintf.

Поток закрывается либо при завершении программы, либо явным образом с помощью функции fclose:

int fclose(FILE*);

Перед закрытием потока информация из связанных с ним буферов выгружается на диск. Рекомендуется явным образом закрывать потоки, открытые для записи.

Пример 1
Пример работы с потоками Приведенная ниже программа построчно считывает данные из текстового файла в буферную переменную s, формирует из них структуру mon и записывает ее в двоичном режиме в выходной файл. Далее иллюстрируется считывание из этого файла произвольной записи. #include <iostream.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(){ FILE *fi, *fo; if((fi = fopen("d:\c\binfile.txt", "r"))==0) {cout << "Ошибка открытия входного файла"; return 1;}; if((fo = fopen("d:\c\binfile.out", "w+b"))==0) {cout << "Ошибка открытия выходного файла"; return 1;}; const int dl = 80; chars[dl]; struct { char type[20]; int opt, rozn; char comm[40]; }mon; while (fgets(s, dl, fi)){ // Преобразование строки в структуру: strncpy(mon.type, s, 19);//Описание strncpy см. в след. разделе mon.opt = atoi(&s[20]);//Описание atoi см. в след. разделе mon.rozn = atoi(&s[25]); strncpy(mon.comm, &s[30], 40); fwrite(&mon, sizeof mon, 1, fo);} fclose(fi); int i; cin >> i;//Номер записи fseek(fo, (sizeof mon)*i, SEEK_SET);// Установка указателя текущей позиции файла на запись i fread(&mon, sizeof mon, 1, fo); cout << "mon.type " << mon.type << " opt " << mon.opt << " rozn "<< mon.rozn << endl; fclose(fo);} Допустим, что в файле хранятся сведения о мониторах. В каждой строке указан тип, оптовая и розничная цены и примечание. Для простоты данные в каждой строке записаны единообразно: первые 20 символов занимает тип монитора, далее по 5 символов оптовая и розничная цена, затем примечание длиной не более 40 символов.



Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 352; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.