Помогите с программой на С++

У меня возникла проблема при работе с файлами в С ++. Вот задача, которую нужно выполнить: Прямая на плоскости задается уравнением аx + by + c = 0, где a и b одновременно не равны нулю. Пусть во входном файле содержатся коэффициенты нескольких прямых (не менее 3). Сформировать четыре исходные файлы из коэффициентов тех прямых, которые: 1)параллельные первой заданной прямой 2)накладываются с первой заданной прямой 3)пересекаются с первой заданной прямой 4)перпендикулярны к первой заданной прямой Программа в цикле каждый раз перезаписывает коэффициенты каждой прямой в каждый файл, но я не знаю как это исправить( Помогите, пожалуйста! Вот мой код:

include <iostream>
#include <Windows.h>
#include <iomanip>
#include <fstream>
#include <string>
#include <stdio.h>
using namespace std;
struct Coefficient
{
    int a; int b; int c; //коэффициенты прямых
};
int main() {
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    string file = "";
    cout << "Введите имя файла" << endl;
    cin >> file;
    Coefficient s;
    ifstream fin;
    fin.open(file, ios_base::in | ios_base::binary);
    if (fin.is_open())
    {
        cout << "Запись данных в ранее созданный файл с названием " << file << endl;
    }
    ofstream fout(file, ios_base::out | ios_base::trunc | ios_base::binary);
    if (!fout.is_open())
    {
        cout << "\nПроизошла ошибка. Не удалось открыть файл " << file << endl;
        return 1;
    }

    int n;
    cout << "\nВведите количество прямых, коэффициенты которых будут вводиться" << endl;
    cin >> n;
    if (n <= 2)
    {
        cout << "\nВведите большее количество прямых";
        cin >> n;
    }
    bool k = 0;
    int a0, b0, c0; //коэффициенты первой заданной прямой

    for (int i = 0; i < n; i++) //цикл для ввода коэффициентов прямых
    {
        cout << "\nВведите коэффициент a прямой " << i + 1 << endl;
        cin >> s.a;
        if (k == 0) { a0 = s.a; }
        cout << "\nВведите коэффициент b прямой " << i + 1 << endl;
        cin >> s.b;
        if (k == 0) { b0 = s.b; }
        cout << "\nВведите коэффициент c прямой " << i + 1 << endl;
        cin >> s.c;
        if (k == 0) { c0 = s.c; }
        fout.write((char*)&s, sizeof s);
        k++;
    }
    fout.close();

    string file1 = "";
    cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые параллельные первой заданной прямой" << endl;
    cin >> file1;
    string file2 = "";
    cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые накладываются с первой заданной прямой" << endl;
    cin >> file2;
    string file3 = "";
    cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые пересекают первую заданную прямую" << endl;
    cin >> file3;
    string file4 = "";
    cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые перпендикулярны к первой заданной прямой" << endl;
    cin >> file4;

    ofstream fout1(file1, ios_base::out | ios_base::trunc | ios_base::binary);
    ofstream fout2(file2, ios_base::out | ios_base::trunc | ios_base::binary);
    ofstream fout3(file3, ios_base::out | ios_base::trunc | ios_base::binary);
    ofstream fout4(file4, ios_base::out | ios_base::trunc | ios_base::binary);
    ifstream fin1;
    ifstream fin2;
    ifstream fin3;
    ifstream fin4;

    fin.open(file, ios_base::in | ios_base::binary);
    if (fin.is_open())
    {
        int i = 1;
        fin.read((char*)&s, sizeof s);//игнорирование коэффициентов первой прямой
        //запись коэффициентов прямых в соответствующие файлы и вывод соответствующих сообщений
        while (fin.read((char*)&s, sizeof s))
        {
            //здесь происходит определение по коэффициентам которые между собой прямые
                if (b0 == 0) {
                    if (s.b == 0) {
                        if ((c0) / (a0) == (s.c) / (s.a)) {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " накладываются" << endl;
                            fout2.write((char*)&s, sizeof s);
                        }
                        else {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " параллельные" << endl;
                            fout1.write((char*)&s, sizeof s);
                        }
                    }
                    else {
                        if (s.a == 0) {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " перпендикулярны" << endl;
                            fout4.write((char*)&s, sizeof s);
                        }
                        else {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
                            fout3.write((char*)&s, sizeof s);
                        }
                    }
                }

                if (a0 == 0) {
                    if (s.a == 0) {
                        if ((c0) / (b0) == (s.c) / (s.b)) {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " накладываются" << endl;
                            fout2.write((char*)&s, sizeof s);
                        }
                        else {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " параллельные" << endl;
                            fout1.write((char*)&s, sizeof s);
                        }
                    }
                    else {
                        if (s.b == 0) {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " перпендикулярны" << endl;
                            fout4.write((char*)&s, sizeof s);
                        }
                        else {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
                            fout3.write((char*)&s, sizeof s);
                        }
                    }
                }

                if (a0 != 0 && b0 != 0) {
                    if (s.a != 0 && s.b != 0) {
                        if ((a0) / (b0) == (s.a) / (s.b)) {
                            cout << "\nПрямая 1 и прямая " << i + 1 << " параллельные" << endl;
                            fout1.write((char*)&s, sizeof s);
                        }
                        else {
                            if (((a0) / (b0)) * ((s.b) / (s.a)) == -1) {
                                cout << "\nПрямая 1 и прямая " << i + 1 << " перпендикулярны" << endl;
                                fout4.write((char*)&s, sizeof s);
                            }
                            else {
                                cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
                                fout3.write((char*)&s, sizeof s);
                            }
                        }
                    }
                    else {
                        cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
                        fout3.write((char*)&s, sizeof s);
                    }
                }
                i++;
        }
        fin.close();
    }
    //вывод коэффициентов исходных файлов
    fin1.open(file1, ios_base::in | ios_base::binary); 
    if (fin1.is_open()) 
    {
        cout << "\nКоэффициенты прямых, параллельных первой заданной прямой и содержатся в файле " << file1 << ":" << endl;
        while (!fin1.eof()) 
        {
            fin1.read((char*)&s, sizeof s);
            cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl; 
        }
        fin1.close();
    }
    fin2.open(file2, ios_base::in | ios_base::binary); 
    if (fin2.is_open()) 
    {
        cout << "\nКоэффициенты прямых, которые накладываются с первой заданной прямой и содержатся в файле " << file2 << ":" << endl;
        while (!fin2.eof())
        {
            fin2.read((char*)&s, sizeof s);
            cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl;
        }
        fin2.close();
    }
    fin3.open(file3, ios_base::in | ios_base::binary);
    if (fin3.is_open()) 
    {
        cout << "\nКоэффициенты прямых, пересекающихся с первой заданной прямой и содержатся в файле " << file3 << ":" << endl;
        while (!fin3.eof())
        {
            fin3.read((char*)&s, sizeof s);
            cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl;
        }
        fin3.close();
    }
    fin4.open(file4, ios_base::in | ios_base::binary);
    if (fin4.is_open())
    {
        cout << "\nКоэффициенты прямых, перпендикулярных к первой заданной прямой и содержатся в файле " << file4 << ":" << endl;
        while (!fin4.eof())
        {
            fin4.read((char*)&s, sizeof s);
            cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl;
        }
        fin1.close();
    }
    return 0;
}

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