Si me pudieran mostrarme en este codigo como guardar y leer un arreglo en binario. En el case 7: guardo el archivo, se crea y todo pero no estoy seguro si se guardo bien porque no puedo leerlo en el case 1: simplemente se cuelga el programa, no se si sea un problema mio al guardar el archivo o un problema en el codigo q lee el archivo. Llevo un par de dias preguntando y nadie me da una respuesta acertada. Cualquier tipo de ayuda se agradecera
[URL="https://mega.co.nz/#!6FERSZgb!EderQBvaxhpUefz9ZjxhXxj5oe0nSILaP6no2wj 8UQo"]https://mega.co.nz/#!6FERSZgb!EderQBvaxhpUefz9ZjxhXxj5oe0nSILaP6no2wj 8UQo[/URL]
Código C++:
Ver original#include <iostream>
#include <cstring>
#include <string>
#include <stdio.h>
#include <fstream>
#define pausa cin.get();
using namespace std;
class libros{
public:
string nombre;
string autor;
private:
};
int agregar(libros array[], int lenth){
for(int i = 0; i < lenth; i++ ){
cout << "\ningrese un nombre: \n" << endl;
cin >> array[i].nombre;
cout << "\ningrese un autor" << endl;
cin >> array[i].autor;
}
return 0;
}
int buscar(libros array[], int lenth, string palabra){
int indice;
for(int i = 0; i < lenth; i++ ){
if(palabra == array[i].nombre){
indice = i;
}
else{
if(palabra == array[i].autor){
indice = i;
}else{
continue;
}
}
}
return indice;
}
int mostrardatos(){
}
int main(){
libros milibro[4];
libros recibidor[4];
bool salir = true;
int option = 0;
do{
cout << "Elige una opcion:" << endl;
cout << "(1) cargar un archivo" << endl;
cout << "(2) para agregar datos " << endl;
cout << "(3) para listar datos" << endl;
cout << "(4) para buscar datos" << endl;
cout << "(5) para modificar datos" << endl;
cout << "(6) para borrar registro" << endl;
cout << "(7) para guadar y salir del programa" << endl;
cin >> option;
switch(option){
case 1:{
char entrada[100];
cout << "Escribe el nombre de la base de datos" << endl;
cin >> entrada;
ifstream lector(entrada,ios::in|ios::binary);
if(!lector) //operador sobre cargado
{
cerr<<"No se pudo lograr abrir el archivo"<<endl;
cerr<<"Error al momento de intentar crearlo"<<endl;
pausa
return 1;
}
// original lector.read((char *)&recibidor,sizeof(recibidor));
lector.read(reinterpret_cast<char*> (&recibidor),sizeof(libros));
for(int i=0;i<10;i++){
cout<<recibidor[i].nombre<<' ';
}
cout<<'\n';
cout<<lector.gcount()<<"characters read\n";
lector.close();
for(int i = 0; i < 4; i++){
cout << recibidor[i].nombre << endl;
cout << recibidor[i].autor << endl;
}
pausa
break;}
case 2:
agregar(milibro,4);
break;
case 3:
for(int a = 0; a < 4; a++){
cout << "\n############" << endl;
cout << "Nombre: " << milibro[a].nombre << endl;
cout << "Autor: " << milibro[a].autor;
milibro[a].autor;
}
pausa
break;
case 4:{
string entra;
cout << "introduce una palabra a buscar" << endl;
cin >> entra;
int indicador = buscar(milibro,4,entra);
cout << "Nombre: " << milibro[indicador].nombre << endl;
cout << "Autor: " << milibro[indicador].autor;
pausa
break;}
case 5:{
string ent;
cout << "introduce un indice de registro q deseas modificar" << endl;
cin >> ent;
int ind;
ind = buscar(milibro,4,ent);
cout << "Introduce nuevo nombre: " << endl;
cin >> milibro[ind].nombre;
cout << "Introduce nuevo autor: " << endl;
cin >> milibro[ind].autor;
break;}
case 6:
int borrar;
cout << "Introduce el numero de registro que quieres borrar" << endl;
cin >> borrar;
milibro[borrar].nombre = "";
milibro[borrar].autor = "";
cout << "Archivo borrado" << endl;
pausa
break;
case 7:
ofstream escritor("biblioteca.txt", ios::out|ios::binary);
for(int t = 0; t < 4 ; t++){
escritor.write((char *)&milibro[t],sizeof(milibro));
}
escritor.close();
salir = false;
break;
}
}while(salir == true);
return 0;
}