我无法在二进制文件C ++中保存3个单词的字符串

问题描述

我试图制作一个程序来保存书目参考,但是当标题超过2个字时,程序崩溃。程序会询问有关这本书的一些信息:名称,作者,社论,出版日期,页数和要搜索的ID。 这是一个示例:

Id: 0
Name: Howls Moving Castle
Author: Hayao Miyazaki
Editorail: Studio Ghibli
Publication date: 2001
Amount of pages: 256

(我知道《哈尔的移动城堡》是一部电影,只是一个例子)

二进制文件已保存,但是当我打开程序并搜索引用时,程序因以下退出代码而崩溃:3221225477

这是代码

#ifndef LIbro_H
#define LIbro_H
#include <stdio.h>
#include <iostream>
#include <sstream>

using namespace std;

class Libro {
private:
    int id;
    string nombreLibro;
    string autor;
    string nombreEditorial;
    int annopublicacion;
    int cantidadPaginas;
public:
    Libro();
    int getId();
    string getNombreLibro();
    string getAutor();
    string getNombreEditorial();
    int getAnnopublicacion();
    int getCantidadPaginas();
    
    void setId(int id);
    void setNombreLibro(string nombreLibro);
    void setAutor(string autor);
    void setNombreEditorial(string nombreEditorial);
    void setAnnopublicacion(int annopublicacion);
    void setCantidadPaginas(int cantidadPaginas);
    
    void getData();
    void putData();
    
    string toString();
    ~Libro();
};

#endif
#include "Libro.h"

Libro::Libro() {
    this->id=0;
    this->nombreLibro="";
    this->autor="";
    this->nombreEditorial="";
    this->annopublicacion=0;
    this->cantidadPaginas=0;
}

int Libro::getId()
{
    return this->id;
}

string Libro::getNombreLibro()
{
    return this->nombreLibro;
}

string Libro::getAutor()
{
    return this->autor;
}

string Libro::getNombreEditorial()
{
    return this->nombreEditorial;
}

int Libro::getAnnopublicacion()
{
    return this->annopublicacion;
}

int Libro::getCantidadPaginas()
{
    return this->cantidadPaginas;
}

void Libro::setId(int id)
{
    this->id=id;
}

void Libro::setNombreLibro(string nombreLibro)
{
    this->nombreLibro=nombreLibro;
}

void Libro::setAutor(string autor)
{
    this->autor=autor;
}

void Libro::setNombreEditorial(string nombreEditorial)
{
    this->nombreEditorial=nombreEditorial;
}

void Libro::setAnnopublicacion(int annopublicacion)
{
    this->annopublicacion=annopublicacion;
}

void Libro::setCantidadPaginas(int cantidadPaginas)
{
    this->cantidadPaginas=cantidadPaginas;
}

void Libro::getData()
{
    int pId;
    string pNombreLibro;
    string pAutor;
    string pNombreEditorial;
    int pAnnopublicacion;
    int pCantidadPaginas;
    
    cout<<"\tId: ";
    cin>>pId;
    cin.ignore();
    cout<<"\tNombre del libro: ";
    getline(cin,pNombreLibro);
    cout<<"\tNombre del Autor: ";
    getline(cin,pAutor);
    cout<<"\tNombre de la editorial: ";
    getline(cin,pNombreEditorial);
    cout<<"\tAnno de publicacion: ";
    cin>>pAnnopublicacion;
    cin.ignore();
    cout<<"\tCantidad de paginas: ";
    cin>>pCantidadPaginas;
    cin.ignore();
    
    this->setId(pId);
    this->setNombreLibro(pNombreLibro);
    this->setAutor(pAutor);
    this->setNombreEditorial(pNombreEditorial);
    this->setAnnopublicacion(pAnnopublicacion);
    this->setCantidadPaginas(pCantidadPaginas);
}

void Libro::putData()
{
    cout<<"\tId: "<<this->getId()<<endl;
    cout<<"\tNombre del Libro: "<<this->getNombreLibro()<<endl;
    cout<<"\tNombre del autor: "<<this->getAutor()<<endl;
    cout<<"\tNombre de la editorial: "<<this->getNombreEditorial()<<endl;
    cout<<"\tAnno de publicacion: "<<this->getAnnopublicacion()<<endl;
    cout<<"\tCantidad de paginas: "<<this->getCantidadPaginas()<<endl;
}



Libro::~Libro() {
    
}
#include<iostream>
#include <fstream>
#include<unistd.h>
#include "Libro.h"

using namespace std;

int main () {
    Libro lib1;
    fstream stream;
    
    stream.open("archivo.txt",ios::binary | ios::out);
    char respuesta='y';
    
    while(respuesta=='y' || respuesta=='Y')
    {
        cout << "\tIncluir informacion Libro: " << endl;
        lib1.getData();
        stream.write((char *)&lib1,sizeof(lib1));
        cout<<"\tArchivo Agregado!\n";
        cout<<"\n\tDesea insertar mas informacion ? (y/n)..";
        cin>>respuesta;
    }
    stream.close();
    int numEs;
    long pos;
    char enconTrado='f';
    
    
    stream.open("archivo.txt",ios::in);
    
    cout<<"\n cual es el numero del libro a buscar: ";
    cin>>numEs;
    
    stream.seekg(0);
    while(!stream.eof())
    {
        pos=stream.tellg();
        stream.read((char *)&lib1,sizeof(lib1));
        if(lib1.getId() == numEs)
        {
            lib1.putData();
            stream.seekg(pos);
            enconTrado='t';
            break;
        }
    }
    if(enconTrado=='f')
    {
        cout<<"\nNo se encuentra el libro..!!\n";
        cout<<"Presione una tecla para continuar...\n";
        exit(2);
    }
    stream.close();
    
    
    return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)