Поэлементная запись данных в файл (с помощью буферной переменной)

На языке C++ создать файл, в который записать данные о людях: фамилию, инициалы, год рождения, пол. Вывести данные о тех людях, которые родились в считанном с клавиатуры году.

Нерациональная реализация данного условия путём записи данных в файл f с помощью массивов arr[i].surname, arr[i].init, arr[i].gender, arr[i].year представлена ниже:

#include <iostream>
#include <fstream>
using namespace std;
struct PERSON
{ 
    string surname;
    string init;
    int year;
    string gender;
};

int main()
{ int i;
    const int n=4; // 4 человека
    PERSON arr[n];


    ofstream fout; //fout - файл
    fout.open ("myfile.dat"); // создать или открыть файл
    if (!fout.is_open())
cout << "Error!"; else {
for (i = 0; i < n; i++) 
    {
        cout << "info " << i+1<<":\n";
        cout << "surname: ";
        getline(cin, arr[i].surname);
        cout << "initials: ";
        getline(cin, arr[i].init);
        cout << "gender: ";
        getline(cin, arr[i].gender);
        cout << "year: ";
        cin >> arr[i].year;
cin.ignore();
cout << endl;
    }    
    
        for (i = 0; i < n; i++) // запись данных в файл

fout << "surname: " << arr[i].surname << "initials: " << arr[i].init <<" gender: "<< arr[i].gender << " year: " << arr[i].year << endl;
    
    
    int ye;
    cout << "year: ";
    cin >> ye;
cout << endl << "data:" << endl;
    for (i=0; i<n; i++) 
    { if (arr[i].year == ye)
cout << "surname: " << arr[i].surname << " initials: " << arr[i].init << " gender: " << arr[i].gender;
cout << endl;
        
    }
     }

fout.close(); // закрыть файл
    return 0;
}

Пожалуйста, помогите продолжить реализацию данного условия путём поэлементной записи данных в файл f с помощью буферной (-ых) переменной (-ых). Нижеизложенный алгоритм осуществляет только создание файла и запись в него данных о людях. Чем нужно дополнить его, чтобы в результате вывести данные о тех людях, которые родились в считанном с клавиатуры году?

#include <iostream>
#include <fstream>
using namespace std;
struct PERSON
{ 
    string surname;
    string init;
    int year;
  string gender; }
      A; // буферная переменная A

int main()
{ int i; 
   const int n=4; // 4 человека

    ofstream fout; //fout - файл
    fout.open ("myfile.txt"); // создать или открыть файл
    if (!fout.is_open())
cout << "error!"; else 
{
for (i = 0; i < n; i++) 
    {
        cout << "info " << i+1<<":\n";
        cout << "surname: ";
        getline(cin, A.surname); 
        fout << A.surname << " ";
        
        cout << "initials: ";
        getline(cin, A.init);
        fout << A.init << " ";
        
        cout << "gender: ";
        getline(cin, A.gender);
        fout << A.gender << " ";
        
        cout << "year: ";
        cin >> A.year;
        cin.ignore();
        fout << A.year << endl;
        
    }    
    
}
fout.close();

// ...

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

Автор решения: Lesya
#include <iostream>
#include <fstream>
using namespace std;

struct PERSON
{ 
    string surname;
    string init;
    int year;
  string gender; 
    
}
      A; // буферная переменная A

int main()
{  int i, temp = 0; 
   const int n=4; // пусть 4 человека
   PERSON data[n]; // массив разнотипных данных о 4 людях (массив структур)

    ofstream fout; //fout - поток для записи
    fout.open ("myfile.txt"); // создать или открыть файл
    if (!fout.is_open())
    cout << "error!"; 
    else 
{
for (i = 0; i < n; i++) 

    {
        cout << "info " << i+1<<":\n";
        cout << "surname: ";
        getline(cin, A.surname); 
        fout << A.surname << " ";
        
        cout << "initials: ";
        getline(cin, A.init);
        fout << A.init << " ";
        
        cout << "gender: ";
        getline(cin, A.gender);
        fout << A.gender << " ";
        
        cout << "year: ";
        cin >> A.year;
        cin.ignore(); // ввод "2000\n", т.е., 2000 - в A.year, '\n' - в потоке -> cin.ignore() игнорирует '\n'
        cout << endl;
        fout << A.year << endl;
        
    }    
    
} fout.close(); // закрыть поток для записи


    ifstream fin; //fin - поток для чтения
    fin.open ("myfile.txt"); // открыть тот же файл
    if (!fin.is_open())
    cout << "error!"; 
else 
{
for (i = 0; i < n; i++) 

    {
        fin >>data[i].surname; // чтение из файла разнотипных данных в массив структур
        fin >>data[i].init;
        fin >>data[i].gender;
        fin >>data[i].year; 
    
    }
    


    int ye;
    cout << "Enter the year: ";
    cin >> ye;
    cout << endl << "data:";
    for (i=0; i<n; i++) 
    { 
        if (data[i].year == ye) 
        { 
        temp=1;
cout << endl << "surname: " << data[i].surname << " initials: " << data[i].init << " gender: " << data[i].gender;
        }
    }
    
    
} fin.close();

    
    if (temp == 0)
cout <<" nothing found!";    
    
    

    return 0; }
→ Ссылка