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

一个程序的 文件输入输出问题

niu91 发布于 2011-04-30 09:07, 452 次点击
程序代码:
#include<fstream>
#include<iostream>
using namespace std;
class abc;
ostream& operator<<(ostream& s,abc x);
#define bool int
#define false 0
class MailMan
{
public:
    bool bHaveMsg;
    void ReadMsgFromFile();
    void OutMsg();
    void InMsg();
    void SaveMsgToFile();
    MailMan();
    virtual ~MailMan();
private:
    char Buf[1024];
    fstream fs;
};
MailMan::MailMan()//构造函数
{
    cout<<"Mail man working!"<<endl;
    bHaveMsg=false;
}
MailMan::~MailMan()//析构函数
{
    cout<<"Mail man leaving..."<<endl;
}
void MailMan::OutMsg()//输出文件
{
   
    if(Buf[0]!='\0')
    {
        cout<<"\n------------Here is your message------------"<<endl;
        cout<<Buf;
        cout<<"\n-------------------End----------------------"<<endl;
    }
    else
    {
        cout<<"\n=================No message=================="<<endl;
        cout<<Buf;
    }
}
void MailMan::InMsg()//写入文件
{
    char temp;
    cin.unsetf(ios::skipws);
    cout<<"\n Please input your message,end with \"~\"(shift+`):"<<endl;
    for(int i=0;i<1024;i++)
    {
        cin>>temp;
        Buf[i]=temp;
        if(temp=='~')
        {
            Buf[i]='\0';
            break;
        }
    }
   
}
void MailMan::SaveMsgToFile()//保存到文件
{
    fs.open("d:\\message.dat",ios::out);
    fs<<Buf;
    fs.close();
    cout<<"\n message saved to file."<<endl;
    return;
}
void MailMan::ReadMsgFromFile()//读取文件
{
    fs.open("d:\\message.dat",ios::in);
    char temp;
    fs.unsetf(ios::skipws);
    for(int i=0;i<1024;i++)
    {
        if(fs>>temp)
        {Buf[i]=temp;}
        else
        {Buf[i]='\0';break;}
    }
    fs.close();
}
int main()//主函数这样写 为什么不能把字符输入进文件当中 而下边的两种主函数就可以
{
    MailMan *p=new MailMan();
    p->ReadMsgFromFile();//把这两行删掉
    p->OutMsg();//是可以写进文件的
    p->InMsg();
    p->SaveMsgToFile();
    delete p;
    return 0;
}

/*int main()
{
    MailMan *p=new MailMan();
    p->ReadMsgFromFile();
    p->OutMsg();
    MailMan *a=new MailMan();
    a->InMsg();
    a->SaveMsgToFile();
    delete p;
    return 0;
}
int main()
{
    MailMan a;
    a.ReadMsgFromFile();
    a.OutMsg();
    MailMan *p=new MailMan();
    p->InMsg();
    p->SaveMsgToFile();
    delete p;
    return 0;
}
*/
实现功能:程序第一次运行的时候,建立名为d:\\message.dat的文件,并把输入的信息存入文件。 以后每次运行的时候,先读取给文本的文件并显示给用户,然后输入新信息,退出时蒋新信息存入这个文档。

2 回复
#2
玩出来的代码2011-05-01 11:39
no problem、、
#3
niu912011-05-03 08:16
回复 2楼 玩出来的代码
在VS2010中能够正常运行出结果
但是在VC6.0和VS2005中,需要在fs.close();前加上fs.clear();才能保障结果运行正确
1