Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2010, 00:00   #1
DRELORD
 
Регистрация: 22.04.2010
Сообщений: 7
По умолчанию где моя ошыбка

Написать программу записи к файлу элементов типа структура для реестрации автомобилей с полями:
Марка автомобиля,
год выпуска,
цвет,
номер.

Распечатать информацию из файла про автомобили , с годом выпуска не поже 2005 года

Код:
#include <fstream.h>
#include <iostream.h>
#include <functional.h>
 
#include <vector>
 
template<typename T> void write(std::ofstream &ofs, T &t) {
   ofs.write(reinterpret_cast<char*>(&t), sizeof(T)); }
 
template<typename T> void read (std::ifstream &ifs, T &t) {
   ifs.read (reinterpret_cast<char*>(&t), sizeof(T)); }
 
template<typename T> void write_v(std::ofstream &ofs, std::vector<T> &v) 
{
   std::vector<T>::size_type size = v.size();
   write(ofs, size);
 
   for(std::vector<s>::iterator it = v.begin(); it != v.end(); ++it)
      write(ofs, *it);
}
 
template<typename T> void read_v (std::ifstream &ifs, std::vector<T> &v)
{
   std::vector<T>::size_type size = 0;
   read(ifs, size);
 
   v.reserve(size);
   while(size--)
   {
      s t;
      read(ifs, t);
      v.push_back(t);
   }
}
 
struct s
{
   char mark [16];
   char color[16];
   int  year;
   int  num;
};
 
void input (s * str)
{
   std::cout << "mark: ";
   std::cin  >> str->mark;
 
   std::cout << "color: ";
   std::cin  >> str->color;
 
   std::cout << "year: ";
   std::cin  >> str->year;
 
   std::cout << "num: ";
   std::cin  >> str->num;
}
 
void output(s * str)
{
   std::cout << str->mark << '.' << str->color << '.' << str->year << '.' << str->num << std::endl;
}
 
bool predicate(s * str)
{
   if(str->year >= 2005)
      return true;
   else
      return false;
}
 
int main()
{
   int nstructs = 0;
 
   std::cout << "enter amount autos for write data to file (0 - base not created): ";
   std::cin  >> nstructs;
 
   if(nstructs != 0)
   {
      std::ofstream out("file.dat");
      if(out.fail())
      {
         std::cerr << "could not open file for write";
         return -1;
      }
 
      std::vector<s> vstructs(nstructs);
      for(std::vector<s>::iterator it = vstructs.begin(); it != vstructs.end(); ++it)
         input(&(*it));
 
      write_v(out, vstructs);
 
      out.close();
   }
 
   std::cout << "read data from file (0 - no, 1 - yes): ";
   std::cin  >> nstructs;
 
   if(nstructs != 0)
   {
      std::ifstream in("file.dat");
 
      if(in.fail())
      {
         std::cerr << "could not open file for read";
         return -1;
      }
 
      std::vector<s> vstructs;
      
      read_v(in, vstructs);
      for(size_t i = 0; i < vstructs.size(); ++i)
         if(predicate(&(vstructs[i])))
            output(&(vstructs[i]));
 
      in.close();
   }
 
   system("pause");
   return 0;
}

Последний раз редактировалось Stilet; 04.06.2010 в 08:57.
DRELORD вне форума Ответить с цитированием
Старый 04.06.2010, 00:16   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

После буквы ш
А если серьёзно, для начала опишите какая ошибка, синтаксическая или в работе программы. Если синтаксическая, то напишите, что выводит компилятор, если в работе - то что делает программа, и чего Вы от неё ожидаете.
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 04.06.2010, 00:45   #3
DRELORD
 
Регистрация: 22.04.2010
Сообщений: 7
По умолчанию

borland C++
ошыбок МОРЕ , а как исправить не знаю
DRELORD вне форума Ответить с цитированием
Старый 04.06.2010, 00:55   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

выложите код как положенно используя тэг и напишите какие ошибки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.06.2010, 09:01   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

VS 2010Beta
Поправил:
Код:
#include <fstream>
#include <iostream>
#include <functional>
...
Запустил получил:
Цитата:
enter amount autos for write data to file (0 - base not created): 2
mark: bmw
color: red
year: 20
num: 1
mark: zonda
color: blue
year: 30
num: 2
read data from file (0 - no, 1 - yes): 1
Для продолжения нажмите любую клавишу . . .
Программа работает.

P.S. Пардонте. После того как годы правильные вввел
получаю:
Цитата:
enter amount autos for write data to file (0 - base not created): 0
read data from file (0 - no, 1 - yes): 1
bmw.red.20.1
zonda.blue.30.2
Для продолжения нажмите любую клавишу . . .
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
где-то ошибаюсь, а где не пойму!укажите ошибку <<Katushka>> Общие вопросы C/C++ 2 15.05.2010 11:41
ошыбка в параметре з ref, наверное... Natok Помощь студентам 2 31.05.2009 17:57
В чем ошыбка?String alexov Общие вопросы C/C++ 2 09.04.2009 19:12