Считывание данных структуры из файла

199
03 декабря 2017, 13:31

Имеется часть кода:

struct St
{
    char Name[30];
    int math;
    int phys;
    int inf;
    int chem;
    int dateOfBirth;
    int group;
    double ball;
} Students;
//Заполнение файла данными
void addStudent() {
    ofstream file1("list.txt", ios_base::app);
    int size = sizeof(file1);
    cout << "Enter the Name of student: ";
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    gets_s(Students.Name, 29);
    file1 << Students.Name << " ";
    cout << "Enter the math ball: ";
    Students.math = input();
    file1 << Students.math << " ";
    cout << "Enter the informatics ball: ";
    Students.inf = input();
    file1 <<  Students.inf << " ";
    cout << "Enter the physics ball: ";
    Students.phys = input();
    file1 <<  Students.phys << " ";
    cout << "Enter the chemistry ball: ";
    Students.chem = input();
    file1 <<  Students.chem << " ";
    cout << "Enter the date of birth: ";
    Students.dateOfBirth = input();
    file1 <<  Students.dateOfBirth << " ";
    cout << "Enter the group of student: ";
    Students.group = input();
    file1 <<  Students.group << " ";
    cout << "Enter the average ball: ";
    cin >> Students.ball;
    file1 << Students.ball << "\n";
    file1.close();
}
int input() {
    int a = 0;
    while (true) {
        cin >> a;
        if (!cin.good()) {
            cout << "Wrong input. Please try again!" << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        else break;
    }
    return a;
}

void showNeedableStudents() {
    ifstream file1("list.txt");
    cout << "Enter the needable group: " << endl;
    int input_group = 0;
    cin >> input_group;
    cout << "Enter the math mark u want: " << endl;
    int input_math = 0;
    cin >> input_math;
    file1.read((char*)&Students, sizeof(Students));
    cout << "Math - " << Students.math << endl;
    file1.close();
}

Содержимое файла list.txt:

fdahs 5 6 7 8 9 3 4
fgdhkjas 1 3 4 5 6 7 4

Задача - считывание данных структуры из файла. Однако при выполнении команды cout << "Math - " << Students.math << endl; (функция showNeedableStudents()) вместо ожидаемой 5 на экран выводится

891302944

. В чём ошибка?

READ ALSO
Как написать цикл прохода по файлам?

Как написать цикл прохода по файлам?

Есть проект в котором содержаться ресурсы ( 2 папки с файлами) нужно сравнивать файлы обеих папокИмена у файлов разные, брать можно в любом...

205
кидать char в string [требует правки]

кидать char в string [требует правки]

возможно ли кидать в string поэлементно char, чтобы строка "обрастала" символами? Если да, то как?

188
как захватить кадр с SurfaceView(camera)

как захватить кадр с SurfaceView(camera)

ЗдравствуйтеМожно ли захватить кадр после вызова методов surface

248
Spring 5 и UTF-8

Spring 5 и UTF-8

Пользуюсь Spring 5Полезли проблемы с UTF-8

230