Поэлементная запись данных в файл (с помощью буферной переменной)
На языке 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 шт):
#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; }