Verán, tengo un inconveniente al momento de crear un fichero de texto, a este fichero yo le mando a guardar diferentes tipos de datos, tipo int, char, long, pero al momento en el que se crea el fichero este solo me guarda las palabras, no los números, los numeros me los muestra de esta manera Èè @QÀt, pero las palabras si me las muestra, lo curioso esta en que mi programa tambien tiene la opcion de cargar un fichero, entonces al momento de mandar a cargar ese fichero, en pantalla si me muestran los valores como deberian de ser.
Pondré un ejemplo, en mis datos de entrada tengo:
Nombre del paciente: Eugenio
Cedula del paciente: Jinotega
Numero de celular: 89647667
Edad del paciente: 20
Estado del Paciente: Critico
Numero de sala: 5
Tipo de expediente: 6
Tipo de enfermedad: 3
Al momento de guardar en fichero se me guarda esto:
œc@ Eugenio Jinotega 3êW Critico Èè @QÀt
Pero al momento de cargar el fichero que contiene estos datos me muestra esto:
Expediente 1:
Paciente: Eugenio
Cedula: Jinotega
Numero Celular: 89647667
Edad: 20
Condicion: Critico
Sala N: 5
Tipo de Expediente: 6
Tipo de enfermedad: 3
Que son los datos que se me tendrían que almacenar en el fichero.
Adjunto el código completo, se trata de un programa que almacena "expedientes" de personas en una clínica, es un programa de aplicación de clases así que es algo básico.
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string>
using namespace std;
//Clase donde se me mostrara los daros ingresados
class Almacenamiento
{
public:
virtual void mostrarINFO() {;};
};
//Clase Paciente
class Paciente
{
private:
char n_Paciente[50]; //Nombres y Apellidos
char c_identidad[30]; //Cedula de indentidad
long n_Movil; //Numero celular
int edad; //Edad de las personas
public: //Metodos
Paciente(){};
void datosPaciente();
friend void operator>>(istream&ci, Paciente &p)
{
cin.ignore();
cout<<"Nombre del paciente: "; cin.getline(p.n_Paciente,50);
cout<<"Cedula del paciente: ";cin.getline(p.c_identidad,30);
cout<<"Numero de celular: ";cin>>p.n_Movil;
cout<<"Edad del paciente: ";cin>>p.edad;
}
friend void operator<<(ostream&ci, Paciente &p)
{
cout<<"Paciente: "<<p.n_Paciente<<endl;
cout<<"Cedula: "<<p.c_identidad<<endl;
cout<<"Numero Celular: "<<p.n_Movil<<endl;
cout<<"Edad: "<<p.edad<<endl;
}
};
//Clase Hospital
class Hospital
{
private: //Atributos
int n_Sala;
int t_Expediente;
int t_Enfermedad;
public:
Hospital(){};
friend void operator>>(istream&ci, Hospital &h)
{
cin.ignore();
cout<<"Numero de sala: ";cin>>h.n_Sala;
cout<<"Tipo de expediente: ";cin>>h.t_Expediente;
cout<<"Tipo de enfermedad: ";cin>>h.t_Enfermedad;
}
friend void operator<<(ostream&ci, Hospital &h)
{
cout<<"Sala N: "<<h.n_Sala<<endl;
cout<<"Tipo de Expediente: "<<h.t_Expediente<<endl;
cout<<"Tipo de enfermedad: "<<h.t_Enfermedad<<endl;
}
};
//Clase Expediente, hija de la clase Almacenamiento
class Expedientes:public Almacenamiento
{
Paciente p;
Hospital h;
char condicion[20];
public:
Expedientes(){};
friend void operator>>(istream&ci, Expedientes *e)
{
cin>>e->p;
cout<<"Estado del Paciente: ";
cin>>e->condicion;
cin>>e->h;
}
void mostrarINFO()
{
cout<<p;
cout<<"Condicion: "<<condicion<<endl;
cout<<h;
}
};
int Menu();
int main(void)
{
Almacenamiento *Lista[40];
int num=0;
while (1)
{
int opc=Menu();
if (opc==5) //Libera
{
for (int i=0;i<num;i++)
{
delete Lista[i];
}
break;
}
else if(opc==1) //Agrega Expediente
{
Expedientes *exp1=new Expedientes();
cin>>exp1;
Lista[num++]=exp1;
}
else if(opc==2) //Mira el expediente
{
for (int i=0;i<num;i++)
{
cout<<"Expediente "<<i+1<<":\n";
Lista[i]->mostrarINFO();
}
}
else if (opc==3) //Graba el Expediente en un fichero
{
char nFichero[30];
cout<<"Ingrese el nombrel del Fichero: ";cin>>nFichero;
ofstream fout;
fout.open(nFichero,ios::out/*|ios::binary*/);
if (!fout)
{
cout<<"Error..."<<endl;
}
for (int i=0;i<num;i++)
{
fout.write((char*)Lista[i],sizeof(Expedientes));
cout<<i+1<<" Datos Guardados en: "<<nFichero<<endl;
}
fout.close();
}
else if (opc==4) //Carga un expediente
{
char nFichero[40];
cout<<"Nombre del fichero: ";cin>>nFichero;
fstream fin(nFichero,ios::in/*|ios::binary*/);
if (!fin)
{
cout<<"No se puede abrir el fichero: "<<endl;
}
else
{
int cont=0;
while (true)
{
Expedientes *exp1=new Expedientes();
Lista[num]=exp1;
if (!fin.read((char*)Lista[num],sizeof(Expedientes)))
{
delete exp1;
break;
}
num++;
cont++;
}
cout<<cont<<"Datos cargados de "<<nFichero<<endl;
}
}
}
system ("pause");
return 0;
}
int Menu()
{
int opc;
cout<<"\t\t** Registro de Expedientes **"<<endl;
cout << "\t\t1. Agregar Expediente"<<endl;
cout << "\t\t2. Ver Expediente"<<endl;
cout << "\t\t3. Grabar Expediente"<<endl;
cout << "\t\t4. Cargar Expediente"<<endl;
cout << "\t\t5. Salir"<<endl;
cout << "\t\t\tOpc: ";
cin >> opc;
return opc;
}