注册 登录
编程论坛 C++教室

求解一个关于 eof() 函数的问题

飞扬冲天 发布于 2012-05-26 17:36, 274 次点击
我写得学生管理系统的构造函数,总是多读一个空的Student信息出来,有个和我一样问题的他把file.read((char *)End->name,15)加上了break,就可以了,这是为什么啊?难道eof()判断出问题了?
ManageStu::ManageStu()
{
    Head = new Student;   
    End = Head->Next = NULL;
    Choose[0] = &ManageStu::Print;
    Choose[1] = &ManageStu::AddStu;
    Choose[2] = &ManageStu::Modifiy;
    Choose[3] = &ManageStu::Search;
    Choose[4] = &ManageStu::DelStu;
   
   
    file.open("e:\\Student.txt",ios_base::in|ios_base::binary);
    if(!file);
    else
    {
        Head->Next = new Student;
        End = Head->Next;
        Student *p = End;
        file.seekg(0);
        while(!file.eof())
        {        
            if(!file.read((char *)End->name,15))
                break;
            file.read((char *)End->num,15);
            file.read((char *)&End->usual_score,sizeof(float));
            file.read((char *)&End->test_score,sizeof(float));
            End->Next = new Student;
            p = End;
            End = End->Next;
        }
        p->Next = NULL;
        delete End;
        End = p;
        file.clear() ;
    }
    file.close();
   
}
2 回复
#2
天使梦魔2012-05-27 09:52
没看懂,不过....

eof()返回一个int类型值是-1,它永远返回这个.eof一般用法在一个输入结束的时候插入一个eof.
你的做法类似,用!符号加一个-1值在循环里作为条件.
#3
飞扬冲天2012-05-30 20:54
回复 楼主 飞扬冲天
while(!file.eof())
         {        
             file.read((char *)End->name,15)
             file.read((char *)End->num,15);
             file.read((char *)&End->usual_score,sizeof(float));
             file.read((char *)&End->test_score,sizeof(float));
             End->Next = new Student;
             p = End;
             End = End->Next;
         }


但我如果把循环写成这样的话文件结尾的位置就不正常..多了一个空的节点出来
 
1