问题描述
我试图制作一个程序来保存书目参考,但是当标题超过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 (将#修改为@)