Ошибка при считывания из файла

столкнулся с такой проблемой при выводе данных из файла данные все кроме самых первых записанных в файл выводиться некорректное.Вот код в чем моя ошибка ?Цикл вывода идет бесконечно ,но в файл пишет все корректно.

#include <iostream>
#include <fstream>
#include <cstring>
#include <conio.h>
#include <windows.h>
#include <iomanip>

using namespace std;

struct Schoolboy
{
    string f;
    string i;
    string o;
    int Class;
    int PhoneNumber;
    int GradeMaths;
    int GradePhysics;
    int GradeRussianLanguage;
    int GradeLiterature;
};

ofstream file;

int main()
{
    int size = 0;
    fstream file("Schoolboy.txt", ios::out);

    cout << "Enter size:";
    cin >> size;

    Schoolboy* Array = new Schoolboy[size];

    for (int i = 0; i < size; i++)
    {
        cout << "Enter F: ";
        cin >> Array[i].f;
        cout << "Enter I: ";
        cin >> Array[i].i;
        cout << "Enter O: ";
        cin >> Array[i].o;
        cout << "Enter Class: ";
        cin >> Array[i].Class;
        cout << "Enter Phone Number: ";
        cin >> Array[i].PhoneNumber;
        cout << "Enter Grade Maths: ";
        cin >> Array[i].GradeMaths;
        cout << "Enter Grade Physics: ";
        cin >> Array[i].GradePhysics;
        cout << "Enter Grade Russian Language: ";
        cin >> Array[i].GradeRussianLanguage;
        cout << "Enter Grade Literature: ";
        cin >> Array[i].GradeLiterature;
    }
    for (int i = 0; i < size; i++)
    {
        file << Array[i].f;
        file << "\n";
        file << Array[i].o;
        file << "\n";
        file << Array[i].i;
        file << "\n";
        file << Array[i].Class;
        file << "\n";
        file << Array[i].PhoneNumber;
        file << "\n";
        file << Array[i].GradeMaths;
        file << "\n";
        file << Array[i].GradePhysics;
        file << "\n";
        file << Array[i].GradeRussianLanguage;
        file << "\n";
        file << Array[i].GradeLiterature;
        file << "\n";
    }

    file.close();

    Schoolboy p;
    file.open("Schoolboy.txt", ios::in);//îòêðûâàåì ïîòîê äëÿ ÷òåíèÿ
    do
    {
        file >> p.f;
        file >> p.i;
        file >> p.o;
        file >> p.Class;
        file >> p.PhoneNumber;
        file >> p.GradeMaths;
        file >> p.GradeRussianLanguage;
        file >> p.GradeLiterature;
        if (file.eof())break;
        cout <<" " <<p.f << " " << p.i << " " << p.o << " " << p.Class << " " << p.PhoneNumber << " " << p.GradeMaths << " " << p.GradePhysics << " " << p.GradeRussianLanguage << " " << p.GradeLiterature<<"\n";

    } while (!file.eof());
    file.close();

}

Ответы (1 шт):

Автор решения: Павел Ериков

Первое о чем хотел сказать, это о том что вы сначала в файл записываете o, а потом i (во 2 цикле). Я думаю вам нужно поменять местами, т.к. вы считываете в таком порядке уже в 3 цикле.

file << Array[i].i;
file << "\n";
file << Array[i].o;

И второе, ошибка заключается в том, что вы забываете считывать GradePhysics из-за это появляется не определенное значение у GradePhysics, а далее и вовсе все ломается.

file >> p.GradeMaths;
file >> p.GradePhysics;
file >> p.GradeRussianLanguage;
→ Ссылка