Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура 
:(
    Опции темы
maxim43k
  Дата 8.9.2011, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.9.2011

Репутация: нет
Всего: нет



Суть проблемы такова: надо ввести данные с клавиатуры в структуру (имя, фамилия, возраст (лет), результат: мин. сек.) в файл 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));
}


Как сделать так, чтобы всё нормально работало и записывалось/считывалось в файлы?
PM MAIL   Вверх
xvr
Дата 9.9.2011, 12:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Ваша функция poisk возвращает указатель на локальную (в ней) структуру, которая немедленно уничтожается при выходе из функции

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.