回 帖 发 新 帖 刷新版面

主题:文件读写错误

以下我标红色的地方结果不对,看不出来哪里错了
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
class MyFriend{
private:
        unsigned int age;
        string name;
        string phone;
public:
        void getdata()   
        {
                cin>>name>>age>>phone;
        }
        void disp()     
        {
                cout<<left<<setw(12)<<name<<setw(8)<<age<<setw(12)<<phone<<endl;
        }
        string getname()
        {
                return name;
        }             
};
void outDate()    //输出数据[color=FF0000],[color=FF0000]这一步有问题,不能显示文件中的信息 [/color][/color]
{
        ifstream input("myNote.txt");       
        MyFriend myfriend;
        cout<<left<<setw(12)<<"姓名"<<setw(8)<<"年龄"<<setw(12)<<"电话"<<endl;
        while(input)        
        {
                myfriend.disp();     
                input.read((char*)&myfriend,sizeof(myfriend));
        };
        input.close();
}
void searchByName()       //按姓名查找,[color=FF0000]输入姓名后没有显示信息[/color]
{
        string sname;
        bool ifFind=false;
        MyFriend myfriend;
        ifstream file("myNote.txt");  //file打开myNOte.dat
        if(file)
        {
                file.seekg(0);
                cout<<"输入要查询的姓名:";
                cin>>sname;
                cout<<left<<setw(12)<<"姓名"<<setw(8)<<"年龄"<<setw(12)<<"电话"<<endl;
                while(file.read((char*)&myfriend,sizeof(myfriend)))
                {
                        if(myfriend.getname()==sname)
                        {        
                                myfriend.disp();
                                ifFind=true;
                                break;
                        }
                        else if(!ifFind)
                                cout<<"对不起,没有找到!"<<endl;
                file.close();
                }
        }
        else cout<<"打开文件失败!";
}
void addDate()          //添加数据,[color=FF0000]数据没有按我预想的读入文件[/color]{
        fstream file("myNote.dat",ios:ut|ios::app);     
        MyFriend myfriend;
        cout<<"添加数据(姓名 年龄 电话):";
        myfriend.getdata();
        file.write((char*)&myfriend,sizeof(myfriend));      
        file.close();
}
void main()
{
        int select;
        do 
        {
                cout<<"选择1:输出数据 2:按姓名查找 3:添加数据 其它数字:退出";
                cin>>select;
                switch(select)
                {
                case 1utDate();break;
                case 2:searchByName();break;
                case 3:addDate();break;
                default:break;
                }
        }
        while(select==1||select==2||select==3||select==4);
}

回复列表 (共3个回复)

沙发


outDate()里面的input.read((char*)&myfriend,sizeof(myfriend));
....................改一改吧,你这样读myfriend如果不出事才有问题呢:)

板凳

怎么改啊

3 楼

while(input)和if(file)有问题
在判断文件是否达到结尾时,不能用对象名去判断,input 和 file 都是 ifstream 类的对象,你可以调用其成员函数 eof 来判断是否已经达到文件结尾。
while(!input.eof()) 和 if(!file.eof())

我来回复

您尚未登录,请登录后再回复。点此登录或注册