Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Листинг 9.3



#include <stdlib.h>

#include <string.h>

#include <fstream.h>

int main()

const int l name = 30,l yea r = 5, l pay = 10, l buf = l name + l pay;

struct Man

{

int birth year;

char name[l name + 1];

float pay;

};

const int l dbase = 100;

Man dbase[l dbase];

char buf[l buf + 1];

ifstream fin("dbase.txt", ios::in|ios::nocreate);

if (!fin)

{

cout << "Ошибка открытия файла";

return 1;

}

int i = 0;

while(fin.getline(buf.l_buf))

{

strncpy(dbase[i].name.buf.l name);

dbase[i].name[l name] = '\0';

dbase[i].birth year = atoi(&buf[l name]);

dbase[i].pay = atof(&buf[l name + l year]);

i++;

if(i > l dbase)

{

cout <<"Слишком длинный файл"<<endl;

return 1;

}

}

int n record = i;

fin.close();

ofstream fout("dbase.txt");

if(!fout){cout <<"Ошибка открытия файла" << endl; return 1;

for (i = 0; i < n record - l; i++)

{

//Принимаем за наименьший первый из рассматриваемых элементов

int imin = i;

//поиск номера минимального элемента из неупорядоченных

for(int j = i + 1; j < n record; j++)

if (dbase[j].birth year < dbase[imin].birth year)imin = j;

//обмен двух элементов массива структур

Man a = dbase[i];

dbase[i] = dbase[imin];

dbase[imin] = a;

}

for(i = 0; i < n record; i++)

{

fout << dbase[i].name << dbase[i].birth year <<''<< dbase[i].pay << endl;

}

fout.close();

cout << "Сортировка завершена" << endl;

return 0;

}

Элементами массива в данном примере являются структуры. Для структур одного типа определена операция присваивания, поэтому обмен двух Элементов массива структур выглядит точно так же, как для основных типов данных.

Для того чтобы записать результаты в файл с тем же именем, файл, открытый для чтения, закрывается, а затем открывается файл с тем же именем для записи (гово­ря более строго, создается объект выходного потока ostream с именем fout). При этом старый файл на диске уничтожается и создается новый, пустой файл, в кото­рый и производится запись массива.





Дата публикования: 2015-10-09; Прочитано: 267 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.081 с)...