请看下面的一段烂程序:为什么结果是:m=1  f=0;而不是:m=1  f=1;呢?
#include<iostream.h>
#include<fstream.h>
class stu{
int number;
char *name;
char G;
int age;
char *tunnum;
public:
stu(){};
stu(int n,char*na,char g,int a,char*tn)
{
  number=n;
  name=na;
  G=g;
  age=a;
  tunnum=tn;
}
friend ostream& operator<<(ostream& obj,stu& a)
{
obj<<a.number<<endl;
obj<<a.name<<endl;
obj<<a.G<<endl;
obj<<a.age<<endl;
obj<<a.tunnum<<endl;
   return obj;
}
static void readfromfile(char*filename)
{
  stu s;
  int sum=0,m=0,f=0;
  ifstream file(filename,ios::binary);
  do
  {
    file.read((char*)&s,sizeof(stu));
file.seekg(sizeof(stu),ios::beg);
//cout<<s<<endl;
sum++;
if(s.G=='M')
m++;
if(s.G=='F')
f++;
  }while(file.eof());
  cout<<m<<"  "<<f<<endl;
}
};void main()
{
  stu a1(101,"you",'M',18,"05523123048"),
  a2(102,"yan",'F',20,"05523123045");
  ofstream fout("f:\\message.txt",ios::binary|ios::ate);
   fout<<a1;
   fout<<a2;
   
   stu::readfromfile("f:\\message.txt");
}

解决方案 »

  1.   

    #include<iostream.h>
    #include<fstream.h>
    class stu{
    int number;
    char name[256];
    char G;
    int age;
    char tunnum[256];
    public:
    stu(){};
    stu(int n,char*na,char g,int a,char*tn)
    {
      number=n;
      strcpy(name,na);
      G=g;
      age=a;
      strcpy(tunnum,tn);
    }
    friend ostream& operator<<(ostream& obj,stu& a)
    {
    obj<<a.number<<endl;
    obj<<a.name<<endl;
    obj<<a.G<<endl;
    obj<<a.age<<endl;
    obj<<a.tunnum<<endl;
       return obj;
    } static void readfromfile(char*filename)
    {
      stu s;
      int sum=0,m=0,f=0;
      ifstream file(filename,ios::binary);
      do
      {
        file.read((char*)&s,sizeof(stu));
            //file>>s;
    //cout<<s<<endl;
    sum++;
    if(s.G=='M')
    m++;
    if(s.G=='F')
    f++;
      }while(!file.eof());
      cout<<s<<endl;
    }
    };void main()
    {
      stu a1(101,"you",'M',18,"05523123048"),
      a2(102,"yan",'F',20,"05523123045");
      ofstream fout("c:\\message.txt",ios::binary);
      fout.write((char*)&a1,sizeof(stu));
      fout.write((char*)&a2,sizeof(stu));  // fout<<a1;
      // fout<<a2;
       
       stu::readfromfile("c:\\message.txt");}或者重载一个〉〉