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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2013, 16:45   #1
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
Стрелка Помогите исправить ошибки

Задание
Составить программу, которая описывает структуру в соответствии с вариантом и записывает введенные пользователем данные в бинарный файл (использовать при этом потоки). Процесс введения прерывается пользователем.

«Сотрудник»: фамилия, дата рождения, год принятия на работу, количество детей, Оклад

Код:
#include <iostream>
#include <fstream>
#include <string>
 
struct Worker
{
  std::string surname;
  std::string birthday;
  unsigned int yearToWork;
  unsigned char countChild;
  unsigned int salary;
};
 
int main()
{   
    size_t SIZE;
    std::cout << "Input number of workers: "; std::cin >> SIZE;
    
    Worker worker[SIZE];
    
    for(int i = 0; i < SIZE; ++i)
    {
      std::cout << "Input surname: ";     std::cin >> worker[i].surname;
      std::cout << "Input birthday: ";    std::cin >> worker[i].birthday;
      std::cout << "Input yearToWork: ";  std::cin >> worker[i].yearToWork;
      std::cout << "Input scountChild: "; std::cin >> worker[i].countChild;
      std::cout << "Input salary: ";      std::cin >> worker[i].salary;
    }
    
    std::ofstream out("outfile.dat", std::ios::binary|std::ios::out);
    for(int i = 0; i < SIZE; ++i)
        out.write((char *)&worker[i], sizeof(worker)/SIZE);
    
    
    system("PAUSE");
    return 0;
}
dkii вне форума Ответить с цитированием
Старый 22.12.2013, 20:59   #2
vvmcpp
Форумчанин
 
Аватар для vvmcpp
 
Регистрация: 11.12.2010
Сообщений: 116
По умолчанию

Вроде особых ошибок нет. На первый взгляд. Но нужно было закрыть поток. Немного переделал. Программа работает. Но возможно , нужно сделать проверки открытия файла, как я написал с открытием для чтения.
Код:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Worker
{
  std::string surname;
  std::string birthday;
  unsigned int yearToWork;
  unsigned char countChild;
  unsigned int salary;
};

int main(int argc, char *argv[])
{
    size_t SIZE;
    std::cout << "Input number of workers: "; 
    std::cin >> SIZE;
    
    Worker worker[SIZE];
    
    for(int i = 0; i < SIZE; ++i)
    {
    
      std::cout << "Input surname: ";     std::cin >> worker[i].surname;
      std::cout << "Input birthday: ";    std::cin >> worker[i].birthday;
      std::cout << "Input yearToWork: ";  std::cin >> worker[i].yearToWork;
      std::cout << "Input scountChild: "; std::cin >> worker[i].countChild;
      std::cout << "Input salary: ";      std::cin >> worker[i].salary;
    }
    
    std::ofstream out("outfile.dat", std::ios::binary|std::ios::out);
    
    for(int i = 0; i < SIZE; ++i)
        out.write((char *)&worker[i], sizeof(worker)/SIZE);
        
        //   закрываем поток
     out.close();   
    
    //  создали новый поток
    ifstream in;
    in.open("outfile.dat");
    if(!in.is_open())
                     {
                        cout<<"Open file failed\n";
                        return 0;   
                           }
    //
    in.seekg(0,ios::end);
    long length=in.tellg();
    in.seekg(0,ios::beg);
    
    long n=length/sizeof(Worker);
    
    //читаем что у нас записалось
    for(int i=0;i<n;++i)
    {
            in.read((char*)&worker,sizeof(struct Worker));
            cout<<" surname "<< worker[i].surname<<endl;
            cout<<" birthday "<< worker[i].birthday<<endl;
            cout<<" yearToWork "<< worker[i].yearToWork<<endl;;
            cout<<" countChild "<< worker[i].countChild<<endl;;
            cout<<" salary "<< worker[i].salary<<endl;
            }
// закрыли поток
    in.close();

   system("PAUSE");
    return EXIT_SUCCESS;
}

Последний раз редактировалось vvmcpp; 22.12.2013 в 21:04.
vvmcpp вне форума Ответить с цитированием
Старый 22.12.2013, 23:17   #3
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

У меня стоит microsoft visual studio 2010 стоит, может поетому выдает ряд ошибок:
1>d:\ббб\vc\форум\форум\6.cpp(21): error C2057: требуется константное выражение
1>d:\ббб\vc\форум\форум\6.cpp(21): error C2466: невозможно выделить память для массива постоянного нулевого размера
1>d:\ббб\vc\форум\форум\6.cpp(21): error C2133: worker: неизвестный размер
1>d:\ббб\vc\форум\форум\6.cpp(23): warning C4018: <: несоответствие типов со знаком и без знака
1>d:\ббб\vc\форум\форум\6.cpp(35): warning C4018: <: несоответствие типов со знаком и без знака
1>d:\ббб\vc\форум\форум\6.cpp(36): error C2070: Worker []: недопустимый оператор sizeof
1>d:\ббб\vc\форум\форум\6.cpp(51): warning C4244: инициализация: преобразование "std::streamoff" в "long", возможна потеря данных
А за помощь спасибо
dkii вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибки hasanovaaygerim C# (си шарп) 4 10.12.2013 15:19
помогите исправить ошибки Euforia_PZAS09_1 Паскаль, Turbo Pascal, PascalABC.NET 0 19.10.2009 21:41
Помогите исправить ошибки Satorin Общие вопросы Delphi 4 25.12.2008 21:35
помогите исправить ошибки kermit Помощь студентам 1 21.06.2008 10:44