Суть проблемы такова: надо ввести данные с клавиатуры в структуру (имя, фамилия, возраст (лет), результат: мин. сек.) в файл F1.txt, затем прочитать этот файл, обработать по заданию и сохранить результат в бинарный файл + проверить, что записалось в бинарный файл. Вот как примерно требуется сделать: | Код | #include <iostream.h> #include <fstream.h> #include <string.h> #include <stdlib.h> #include <iomanip.h> #include <conio.h> typedef struct {char name[20]; //имя сотрудника char fam[30]; //фамилия int index; //индекс детали int cena; //цена детали int koldet; //деталей за смену }BRIGADA; BRIGADA *poisk(int n, char *f1_name, char *f2_name); int size_d=sizeof(BRIGADA); void main() {BRIGADA *pt; int n; char f1_name[20], f2_name[20]; clrscr(); cout<<"Введите имя файла Ф1: "; cin>>f1_name; cout<<"Введите имя файла Ф2 (бинарный): "; cin>>f2_name; cout<<"Введите число рабочих в бригаде: "; cin>>n; pt=poisk(n,f1_name,f2_name); cout << "Бригадир " << pt->fam << " " << pt->name << " - Передовик"; getch(); } BRIGADA *poisk(int n, char *f1_name, char *f2_name) {char str[100]; BRIGADA mas[100], *k; int i, pro; fstream f1(f1_name, ios::in | ios::out); if (f1.fail()) { cout<<"Ф1 Ошибка!"<<f1.rdstate()<<endl; } fstream f2(f2_name, ios::in | ios::binary | ios::out); if (f2.fail()) { cout<<"Ф2 Ошибка!"<<f2.rdstate()<<endl; } for(i=0;i<n;i++) { cout<<"Введите Фамилию: "; cin>>mas[i].fam; f1<<mas[i].fam<<" "; cout<<"Введите Имя: "; cin>>mas[i].name; f1<<mas[i].name<<" "; cout<<"Введите индекс: "; cin>>mas[i].index; f1<<mas[i].index<<" "; cout<<"Введите цену: "; cin>>mas[i].cena; f1<<mas[i].cena<<" "; cout<<"Введите количество деталей: "; cin>>mas[i].koldet; f1<<mas[i].koldet<<" "<<endl; } f1<<"\nПроверка считывания из Ф2: \n"; f2.seekg(0,ios::beg); for(i=0;i<n;i++) f2.write((char *)&mas[i],size_d); f2.seekp(0, ios::beg); for(i=0;i<n;i++) { f2.read((char *)&mas[i],size_d); f1<<mas[i].fam<<" "; f1<<mas[i].name<<" "; f1<<mas[i].index<<" "; f1<<mas[i].cena<<" "; f1<<mas[i].koldet<<" "<<endl; } pro=mas[0].cena*mas[0].koldet; for(int j=1;j<n;j++) {if ((mas[j].cena*mas[j].koldet) > pro) { pro=mas[j].cena*mas[j].koldet; k=&mas[j]; } else k=&mas[0]; } return k; f1.close(); f2.close(); }
|
А вот как у меня получается: | Код | #include <iostream.h> #include <fstream.h> #include <conio.h> struct time_s {int min; int sec; }; struct athlete {char name [20]; char f_name [20]; int age; time_s time; }; void input(athlete* &all, int); int process(athlete* &all, int); void output(athlete* &all, int); void main() {athlete *all = NULL; int count, min; count = min = 0; cout << "Введите количество спортсменов\n"; cin >> count; input(all, count); min = process(all, count); output(all, min); getch(); } void input(athlete* &all, int count) {int i; all = new athlete[count]; cout << "Введите данные о спортсменах" " (имя, фамилия, возраст, результат в мин. и сек. через пробел):\n"; for (i = 0; i < count; ++i) {cout << i + 1 << ". "; cin >> all[i].name; cin >> all[i].f_name; cin >> all[i].age; cin >> all[i].time.min; cin >> all[i].time.sec; } } int process(athlete* &all, int count) {int min = 0; for (int i = 0; i < count; i++) if (i == 0) min = i; else if (all[i].age < all[min].age) min = i; return min + 1; } void output(athlete* &all, int min) {cout << "\nСамый юный участник:\n"; cout << "Порядковый номер в реестре: " << min << "\nИмя: " << all[min - 1].name << "\nФамилия: " << all[min - 1].f_name << "\nВозраст: " << all[min - 1].age << "\nРезультат: " << all[min - 1].time.min << " мин. " << all[min - 1].time.sec << " сек. "; ofstream file("F2.bin", ios::out | ios::binary); file.write((char *)&all[min], sizeof(athlete)); }
|
Как сделать так, чтобы всё нормально работало и записывалось/считывалось в файлы?
|