Пример работы с потоками в С++

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

Программа построчно считывает данные из текстового файла в буферную переменную s, затем формирует из них структуру mon и записывает ее в двоичном режиме в выходной файл. Далее иллюстрируется считывание из этого файла произвольной записи.
#include 
#inclucle 
#include 
#include 
int main(){

FILE *fi. *fo:
if((fi = fopen("d:\\c\\file.txt". "r")) == 0){
cout « "Ошибка открытия входного файла"; return 1;}
1f((fo = fopen("d:\\c\\binfile.out". "w+b")) == 0){
cout « "Ошибка открытия выходного файла"; return 1;}
const int dl = 80;
char s[dl];
struct{
char type[20];
int opt. rozn;
char comm[40];
}mon;
int kol = 0; // Количество записей в файле
while (fgets(s, dl, fi)){
// Преобразование строки в структуру;
strncpy(mon.type, s, 19);
mon.type[19]='\0';
mon.opt = atoi(&s[20]);
mon.rozn = atoi(&s[25]);
strncpy(mon.comm,&s[30],40);
fwrite(&mon, sizeof mon, 1 ,fo);
kol++;
}
fclose(fi);
int i; cin » i; // Номер записи
if (i >= kol){cout « "Запись не существует"; return 1;}
// Установка указателя текущей позиции файла на запись i;
fseek(fo, (sizeof mon)*i, SEEK_SET);
fread(&mon, sizeof mon, 1, fo);
cout « "mon.type " « mon.type « " opt " « mon.opt
« " rozn " « mon.rozn « endl;
fclose(fo);
return 0;
}
Онлайн всего: 4
Гостей: 4
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте