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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2013, 04:47   #1
dane.yeah
Новичок
Джуниор
 
Регистрация: 24.10.2013
Сообщений: 2
По умолчанию Чтение из файла в структуру, вывод структуры на экран.

Собственно запускаем такую программу:
Код:

struct StructEmployee {;
    int id;
    string fullname;
    string appointment;
    string education;
    int expirience;
} *UsrStruct;
StructEmployee StructInit() {
    StructEmployee UsrStruct;
    UsrStruct.fullname = new string;
    UsrStruct.appointment = new string;
    UsrStruct.education = new string;
    return UsrStruct;
}
int CheckFileSize (const char *FileName) {
    int FileSize;
    fstream labfile;
    labfile.open("FileName",ios::in);
    labfile.seekg(0,ios::end);
    FileSize = labfile.tellg();
    labfile.close();
    return FileSize;
}
int GetStructureSize(const char *FileName) {
    int StructSize;
    fstream labfile;
    labfile.open("FileName",ios::out);
    StructSize = ios::end;
    labfile.close();
    return StructSize;
}
void RecordStructureToFile(int StructSize, const char* FileName, StructEmployee *UsrStruct) {
    int size[StructSize];
    ofstream labfile(FileName, ios::binary);
    for (int iter = 0;iter < StructSize;iter++) {
        size[iter] = sizeof(int)+strlen(UsrStruct[iter].fullname.c_str())+strlen(UsrStruct[iter].appointment.c_str())+strlen(UsrStruct[iter].education.c_str())+ sizeof(int);
        labfile.write((char*)(&UsrStruct[iter]),size[iter]);
    }
    labfile.close();
}
void ReadFileToStrucure (int StructSize,const char *FileName,StructEmployee *UsrStruct) {
    int size[StructSize],StructOneSize=0;
    ifstream labfile (FileName,ios::binary);
    for (int iter = 0; iter < StructSize; iter++) {
        UsrStruct[iter] = StructInit();
        char *buf = new char [size[iter]];
        labfile.seekg(StructOneSize);
        labfile.read(buf,size[iter]);
        StructOneSize += size[iter];
        UsrStruct[iter] = * ((StructEmployee *)buf);
        delete[] buf;
    }
}
string GetDataOfFile(const char *FileName) {
    string line;
    vector<string> lines;
    ifstream labfile(FileName);
    while(getline(labfile,line)) {
        try {
            lines.push_back(line);//заполняем вектор
        } catch (...) {
            labfile.close();
            throw;
        }
    }
    srand(time(NULL));
    line = lines[rand()%lines.size()];
    return line;
}
void InputStructEmployee (int StructSize, StructEmployee *UsrStruct) {
    const char *FileName;
    for (int iter = 0; iter < StructSize; iter++) {
        UsrStruct[iter].id = iter + 1;
        UsrStruct[iter].expirience = rand()%20;
        FileName = "education.txt";
        UsrStruct[iter].education = GetDataOfFile(FileName);
        FileName = "FIO.txt";
        UsrStruct[iter].fullname = GetDataOfFile(FileName);
        FileName = "appoint.txt";
        UsrStruct[iter].appointment= GetDataOfFile(FileName);
    }
    FileName = "lab.dat";
    RecordStructureToFile(StructSize,FileName,UsrStruct);
}
void OutputStructEmployee (int StructSize,const char *FileName, StructEmployee *UsrStruct) {
    ReadFileToStrucure(StructSize,FileName,UsrStruct);
    for (int iter = 0; iter < StructSize; iter++) {
        cout << "ФИО: " << UsrStruct[iter].fullname << endl;
        cout << "Образование: " << UsrStruct[iter].education << endl;
        cout << "Стаж: " << UsrStruct[iter].expirience << endl;
        cout << "Должность: " <<UsrStruct[iter].appointment << endl << endl;
    }
}
функция ReadFileToStrucure() работает не так как надо, не пойму почему, компиль ещё выдает ошибки на StructInit()
Цитата:
error: invalid conversion from 'std::string*' to 'char'
dane.yeah вне форума Ответить с цитированием
Старый 24.10.2013, 08:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
UsrStruct.fullname = new string;
ИМХО достаточно просто UsrStruct.fullname = "";
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2013, 14:23   #3
dane.yeah
Новичок
Джуниор
 
Регистрация: 24.10.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
ИМХО достаточно просто UsrStruct.fullname = "";
Ошибка пропала, спасибо, но проблема остался, при чтении из файла в структуру вылазит ошибка, не пойму в чём проблема, вроде и память выделяю и другие вещи делаю
dane.yeah вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение BMP файла и вывод его на экран Timurkh77 C# (си шарп) 4 24.03.2013 00:18
Чтение из файла и вывод на экран. Си dma Помощь студентам 0 25.03.2012 16:57
Не проходит чтение и вывод на экран из файла. Анастасия1 Паскаль, Turbo Pascal, PascalABC.NET 4 14.09.2011 20:35
чтение из текстового файла в структуру TRAIN и вывод информации по запросу (Паскаль) Arabic_Coffee Помощь студентам 0 14.05.2011 21:11
Чтение с файла в структуру trance-boy Общие вопросы C/C++ 6 08.11.2010 00:11