应该是vector有问题但是并没有发现错在哪里,文件内容读取不了
而且连while做循环时居然都会出错
如图:
按任意键后退出居然出错!
代码如下:有点长
demo.cpp
#include<iostream>
#include<string>
#include"Book.h"
#include"BookInventory.h"
#include"AddBook.h"
using namespace std;
int main()
{
AddBook addbook;
addbook.getBook();
BookInventory B;
system("pause");
return 0;
}
Book.cpp
#include<iostream>
#include"Book.h"
using namespace std;
//图书信息
Book::Book()
{
m_strBookName = "C++";
m_iBookCode = "001";
m_iBookCount = 2;
}
Book::Book(string book_name, string book_code, int book_count)
{
m_strBookName = book_name;
m_iBookCode = book_code;
m_iBookCount = book_count;
}
Book::~Book()
{
}
void Book::displayBook()
{
cout << "图书名称:" << m_strBookName << endl;
cout << "图书编号:" << m_iBookCode << endl;
cout << "剩余本数:" << m_iBookCount << endl;
}
Book.h
#ifndef _CLASS_H
#define _CLASS_H
#include<string>
using namespace std;
class Book
{
public:
Book();
Book(string book_name,string book_code,int book_count);
virtual~Book();
void displayBook();
protected:
string m_strBookName;
string m_iBookCode;//图书编号
int m_iBookCount;//剩余本数
};
#endif
AddBook.cpp
#include"AddBook.h"
int AddBook::m_iSum = 0;//初始化sum
AddBook::AddBook()
{
}
void AddBook::getBook()
{
string name;
string code;
int count;
int t = 0;
while (1)
{
cout << "请输入图书名称" << endl;
cin >> name;
cout << "请输入图书编号" << endl;
cin >> code;
cout << "请输入此类图书的数目" << endl;
cin >> count;
Book b(name, code, count);
m_iSum++, t++;
book.push_back(b);
cout << "是否继续录入图书,是:请按1,否:按任意键退出" << endl;
int a;
cin >> a;
if (a != 1)//判断是否继续输入
{
break;
}
}
//book[0].displayBook();
fstream file("book.txt", ios::app | ios::out);
if (!file)
{
cout << "文件打开失败" << endl;
}
for (int i = 0; i < t; i++)
{
file.write((char*)&book[i], sizeof(book[i]));
}
file.close();
}
AddBook::~AddBook()
{
}
AddBook.h
#ifndef _ADDBOOK_H
#define _ADDBOOK_H
//添加图书
#include<string>
#include<vector>
#include<fstream>
#include<iostream>
#include"Book.h"
using namespace std;
class AddBook :public Book
{
public:
AddBook();
virtual ~AddBook();
void getBook();
private:
static int m_iSum;//记录图书种类数目
vector<Book>book;//定义图书数组
};
#endif
BookInventory.cpp
#include"BookInventory.h"
BookInventory::BookInventory()//将txt的内容读进book[]中
{
Book b;
top = 0;
fstream file("book.txt", ios::in);
while (!file.eof())//读取txt内容
{
if (!file)
{
cout << "文件为正常打开" << endl;
break;
}
file.read((char*)&b, sizeof(b));
top++;
book.push_back (b);
}
for (int i = 0; i < top; i++)//打印从txt中读取的结果
{
book[i].displayBook();
}
file.close();
}
BookInventory::~BookInventory()
{
}
BookInventory.h
#ifndef _BOOKINVENTORY_H
#define _BOOKINVENTORY_H
//图书库,将文件内容写入图书数组
#include<string>
#include<vector>
#include<fstream>
#include<iostream>
#include"Book.h"
using namespace std;
class BookInventory :public Book
{
public:
BookInventory();
~BookInventory();
private:
int top;//记录图书种类数目
vector<Book>book;//定义图书数组
};
#endif
if (!file)
{
}
for (int i = 0; i < t; i++)
{
}
这里打开文件, 你的程序仍然会尝试执行for里面的内容, 就会导致指针错误了. 应该是在退出后 不但要结束while循环, 还应该退出函数, 不应该继续执行while后面的语话.