Как сохранять данные человека в файле?

Вот что находится как комментарий в коде, то, что я сделал:

#include <iostream>
#include <fstream>
#include <conio.h>
#define max 100

using namespace std;

struct fecha{
    int dia;
    int mes;
    int anyo;
};

struct persona{
    char nombre[20];
    char genero;
    int edad;
    fecha fecha_nacimiento;
};

void almacenar();
void  Rellenar_Datos(persona[],int);
persona leer_Persona();
fecha leer_Fecha();

    int n;
    persona personas[max];
int main(){

    cout<<"Numero de personas: ";
    cin>>n;

    Rellenar_Datos(personas,n);
    almacenar();
    getch();
    return 0;
}
/*
void almacenar(){
    ofstream salida;
    salida.open("strut.txt",ios::out);
    if(salida.fail()){
        cout<<"Error..";
    }else {

        salida<<Rellenar_Datos(personas,n);
    }
}
*/

void  Rellenar_Datos(persona A[],int n){

    for(int i=0;i<n;i++){
        cout<<"Personaje "<<i+1<<" "<<endl;
        A[i]=leer_Persona();
    }

}

persona leer_Persona(){
    persona p;

    cout<<"Nombre: ";
    fflush(stdin);
    cin.getline(p.nombre,20);
    cout<<"Genero: ";
    fflush(stdin);
    cin>>p.genero;
    cout<<"Edad: ";
    fflush(stdin);
    cin>>p.edad;
    cout<<"Fecha de nacimiento "<<endl;
    fflush(stdin);
    p.fecha_nacimiento = leer_Fecha(); 

    return p;
}

fecha leer_Fecha(){
    fecha f;

    cout<<"Dia: ";
    cin>>f.dia;
    cout<<"Mes: ";
    cin>>f.mes;
    cout<<"Anio: ";
    cin>>f.anyo;

    return f;
}
2
задан 10.07.2017, 01:32
1 ответ
salida<<Rellenar_Datos(personas,n);

, Поскольку ты смог подтверждать, lГ-nea не составляет эту ни одного из способов. Ты хочешь сохранять данные, которых ввел пользователь..., давайте видеть cГіmo хранится счастье informaciГіn:

void  Rellenar_Datos(persona A[],int n){
    for(int i=0;i<n;i++){
        cout<<"Personaje "<<i+1<<" "<<endl;
        A[i]=leer_Persona();
    }
}

, Поскольку мы видим, попросившие данные хранятся в договоренности типа persona. Того, что ты должен делать тогда, последовательно преобразовывать структура persona. Возможный способ это получать состоит в том, чтобы перегружать оператор inserciГіn:

std::ostream& operator<<(std::ostream& out, const persona& p)
{
  out.write(p.nombre,20);
  return out << p.genero << p.edad << p.fecha_nacimiento;
  // Nota: falta la sobrecarga del operador para el tipo fecha
}

void almacenar(persona A[],int n){
  ofstream salida;
  salida.open("strut.txt",ios::out);
  if(salida.fail()){
    cout<<"Error..";
  }else {
    for(int i=0;i<n;i++)
      salida<<A[i];
  }
}

// Mejor esto
const int max = 100;
// que esto
#define max 100
// ya que los defines no tienen tipado fuerte

int main(){
  // Mejor evitar el uso de variables globales
  int n;
  persona personas[max];

  cout<<"Numero de personas: ";
  cin>>n;

  Rellenar_Datos(personas,n);
  almacenar(personas,n);
  getch();
  return 0;
}
3
ответ дан 24.11.2019, 11:58