求教一个有关c++文件输入输出的有关问题
求教一个有关c++文件输入输出的问题
最近我编写了一个同学录的程序
在测试其中文件的存取函数时发现了一个问题,就是虽然程序在编译时不出错误,也能运行,但是运行的结果却不正确,从文件读出的数据都是一些乱码,在这里我附上程序的代码,希望各位高人给予解答,十分感谢!!!!!
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
class Data //定义数据基类
{
public:
Data(){};
virtual int Compare(Data *)=0;
virtual void Show()=0;
virtual ~Data(){};
};
class Node //定义节点基类
{
private:
Data * sdata;
Node * snext;
public:
Node(){sdata=NULL;snext=NULL;}
Node(Node &node)
{
sdata=node.sdata;
snext=node.snext;
}
void InputData(Data *sdata1) {sdata=sdata1;}
void ShowNode() {sdata-> Show();}
Data *GetData() {return sdata;}
friend class List;
friend void StoreFile(List &);
};
class List //定义链表基类
{
Node *head;
public:
List();
~List(){DeleteList();}
void AddNode(Node *snode);
Node *DeleteNode(Node *);
Node *LookUp(Data &);
void ShowList();
void DeleteList();
Node *GetListHead(){return head;}
Node *GetNextNode(Node *snode) {return snode-> snext;}
};
List::List()
{
Node *p;
p=new Node;
p-> snext=p;
head=p;
}
void List::AddNode(Node *snode)
{
Node *q,*temp;
Data *p=snode-> sdata;
q=head-> snext;
temp=head;
while((q!=head)&&(p-> Compare(q-> sdata))==(1))
{
temp=q;
q=q-> snext;
}
snode-> snext=q;
temp-> snext=snode;
}
Node *List::DeleteNode(Node * snode)
{
Node *p1,*p2;
p1=head-> snext;
p2=head;
while(p1!=snode)
{
p2=p1;
p1=p1-> snext;
}
p2-> snext=p1-> snext;
return snode;
}
Node * List::LookUp(Data & data)
{
Node *p=head-> snext;
Data *q=& data;
while(p!=head)
{
if(p-> sdata-> Compare(q)==0)
return p;
p=p-> snext;
}
return 0;
}
void List::ShowList()
{
Node *p=head;
while(p-> snext!=head)
{
p=p-> snext;
(p-> sdata)-> Show();
}
}
void List::DeleteList()
{
Node *p1,*p2;
p1=head-> snext;
while(p1!=head)
{
delete p1-> sdata;
p2=p1;
最近我编写了一个同学录的程序
在测试其中文件的存取函数时发现了一个问题,就是虽然程序在编译时不出错误,也能运行,但是运行的结果却不正确,从文件读出的数据都是一些乱码,在这里我附上程序的代码,希望各位高人给予解答,十分感谢!!!!!
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
class Data //定义数据基类
{
public:
Data(){};
virtual int Compare(Data *)=0;
virtual void Show()=0;
virtual ~Data(){};
};
class Node //定义节点基类
{
private:
Data * sdata;
Node * snext;
public:
Node(){sdata=NULL;snext=NULL;}
Node(Node &node)
{
sdata=node.sdata;
snext=node.snext;
}
void InputData(Data *sdata1) {sdata=sdata1;}
void ShowNode() {sdata-> Show();}
Data *GetData() {return sdata;}
friend class List;
friend void StoreFile(List &);
};
class List //定义链表基类
{
Node *head;
public:
List();
~List(){DeleteList();}
void AddNode(Node *snode);
Node *DeleteNode(Node *);
Node *LookUp(Data &);
void ShowList();
void DeleteList();
Node *GetListHead(){return head;}
Node *GetNextNode(Node *snode) {return snode-> snext;}
};
List::List()
{
Node *p;
p=new Node;
p-> snext=p;
head=p;
}
void List::AddNode(Node *snode)
{
Node *q,*temp;
Data *p=snode-> sdata;
q=head-> snext;
temp=head;
while((q!=head)&&(p-> Compare(q-> sdata))==(1))
{
temp=q;
q=q-> snext;
}
snode-> snext=q;
temp-> snext=snode;
}
Node *List::DeleteNode(Node * snode)
{
Node *p1,*p2;
p1=head-> snext;
p2=head;
while(p1!=snode)
{
p2=p1;
p1=p1-> snext;
}
p2-> snext=p1-> snext;
return snode;
}
Node * List::LookUp(Data & data)
{
Node *p=head-> snext;
Data *q=& data;
while(p!=head)
{
if(p-> sdata-> Compare(q)==0)
return p;
p=p-> snext;
}
return 0;
}
void List::ShowList()
{
Node *p=head;
while(p-> snext!=head)
{
p=p-> snext;
(p-> sdata)-> Show();
}
}
void List::DeleteList()
{
Node *p1,*p2;
p1=head-> snext;
while(p1!=head)
{
delete p1-> sdata;
p2=p1;