如何解决我无法在二进制文件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 举报,一经查实,本站将立刻删除。