| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 544 人关注过本帖
标题:[求助]大家来找错误(一个文件留言类)
只看楼主 加入收藏
橘子酱
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-13
收藏
 问题点数:0 回复次数:6 
[求助]大家来找错误(一个文件留言类)
文件不能读和写,什么原因?

/*题目说明:程序第一次运行时,建立一个名为C:\msg.ini文件,
把用户输入的信息存入该文件;以后每次运行时,都先读取该
文件的内容并显示给用户,用户输入新的信息并保存,显示的
信息可以是最新的,也可以是所有的*/

#include<iostream.h>
#include<fstream.h>
#include<string.h>
class mailman{
public:
bool havemsg; //是否有信息的标记
void outmsg(); //显示用户输入的信息
void inmsg(); //接受用户信息
readmsg(); //从文件中读取信息
savemsg(); //向文件中保存信息
mailman();
//virtual mailman(){}
private:
char ch[1024];
fstream fs;
};

mailman::mailman()
{
fs.open("c:\msg.ini",ios::nocreate); //测试是否存在msg.ini文件
if(!fs)
{
havemsg=false;
fs.open("c:\msg.ini",ios::app); //如文件不存在则新建
if(!fs)
{
cout<<"建立文件失败!\n";

}
}
int i;
do{
do{
cout<<'\t'<<"1.写入留言\n";
cout<<'\t'<<"2.查看留言\n";
cout<<'\t'<<"3.退出\n";
cin>>i;
}while(i>3||i<1);
switch(i)
{
case 1: inmsg();break;
case 2: readmsg();break;
case 3: break;
}
}while(i!=3);
}

void mailman::inmsg()
{
cout<<"请输入留言:";
cin>>ch;
havemsg=true;
savemsg();
}

mailman::savemsg()
{
fs.open("c:\msg.ini",ios::app);
if(!fs)
{
cout<<"保存文件失败!\n";
return 1;
}
fs.write(ch,strlen(ch));
fs.close();
}

mailman::readmsg()
{
if(havemsg==true)
{
int i;
cout<<'\t'<<"1.最新留言\n";
cout<<'\t'<<"2.全部留言\n";
cin>>i;
fs.open("c:\msg.ini",ios::in);
if(i==1)
{
fs.seekg(-strlen(ch),ios::end);
outmsg();
}
else
outmsg();
fs.close();
}
else
cout<<'\t'<<"没有留言\n";
}


void mailman::outmsg()
{
char c;
while(fs.get(c))
cout<<c;
cout<<endl;
}

main()
{
mailman aa;
return 0;
}
搜索更多相关主题的帖子: 留言 文件 
2006-05-13 15:58
橘子酱
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-13
收藏
得分:0 
哪位大哥顶一下
2006-05-13 16:10
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
为什么我用nocreate时说不是std::ios的member呢?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-13 19:25
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
还有那个noreplace也是,总用不了

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-13 19:25
橘子酱
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-13
收藏
得分:0 
你用的是vc6.0么?我也遇到这种问题,但不知道怎么解决
#include<iostream.h>
#include<fstream.h>
#include<string.h>

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
也会出现类似的问题

我又改进了一下,但不能查看最新信息,哪个大哥再顶一下
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdio.h>
//using namespace std;
class mailman{
public:
bool havemsg; //是否有信息的标记
void outmsg(); //显示用户输入的信息
void inmsg(); //接受用户信息
void readmsg(); //从文件中读取信息
bool savemsg(); //向文件中保存信息
void sh(); //插入表情
mailman();
private:
char ch[1024];
char name[24];
char str[1000];
fstream fs;
};

mailman::mailman()
{
fs.open("c:\\msg.ini", ios::in);//测试是否存在msg.ini文件
if(!fs.is_open())
{
havemsg=false;
fs.open("c:\\msg.ini",ios::app); //如文件不存在则新建
if(!fs.is_open())
{
cout<<"建立文件失败!\n";

}
}
else
{
char a[10]={0}; //是否有信息
fs.read(a,3);
if(strlen(a)>1)
havemsg=true;
}
fs.close();
int i;
do{
do{
cout<<'\t'<<"1.写入留言\n";
cout<<'\t'<<"2.查看留言\n";
cout<<'\t'<<"3.退出\n";
cin>>i;
}while(i>3||i<1);
switch(i)
{
case 1: inmsg();break;
case 2: readmsg();break;
case 3: break;
}
}while(i!=3);
}

void mailman::inmsg()
{
cout<<"请输入昵称:";
cin>>name;
strcpy(ch,name);
char h[2]=":";
strcat(ch,h);
cout<<"请输入留言:";
cin>>str; //输入空格程序崩溃,用gets(ch)程序语句混乱
sh();
strcat(ch,str);
cout<<endl;
cout<<ch;
cout<<endl;
havemsg=true;
savemsg();
}

void mailman::sh()
{
cout<<"插入表情(y/n)";
char k;
cin>>k;
if(k=='y'||k=='Y')
{
char a[10];
for(int i=1,int j=14;i<7;i++)
a[i]=i;
for(;j<18;i++,j++)
a[i]=j;
for(int x=0;x<10;x++)
cout<<(x+1)<<"."<<a[x]<<" ";
cout<<endl<<"请选择:";

cin>>i;
char aa[2];
aa[0]=a[i],aa[1]='\0';
strcat(ch,aa);
}
}

bool mailman::savemsg()
{
fs.open("c:\\msg.ini", ios::app);
if(!fs.is_open())
{
cout<<"保存文件失败!\n";
return false;
}
fs.write(ch, strlen(ch));
fs<<" "<<strlen(ch);
fs<<endl;
fs.close();

}

void mailman::readmsg()
{
if(havemsg==true)
{
int i;
cout<<'\t'<<"1.最新留言\n";
cout<<'\t'<<"2.全部留言\n";
cin>>i;
fs.open("c:\\msg.ini",ios::in);
fs.seekg(0,ios::beg);
if(i==1)
{
fs.seekg(-1,ios::end);
int a;
fs>>a;
cout<<a; //查找最新信息的位置指针,但fs.seekg(-(a+5),ios::end);不执行
fs.seekg(-(a+5),ios::end);
outmsg();
}
else
outmsg();
fs.close();
}
else
cout<<'\t'<<"没有留言\n";
}


void mailman::outmsg()
{
char c;
while(fs.get(c))
cout<<c;
cout<<endl;
}

main()
{
mailman aa;
return 0;
}
2006-05-14 15:43
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
没时间看这,不过帮你顶下

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-14 15:51
huanguyu
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-4-26
收藏
得分:0 

不懂这个 不过顶下先


看越多书就发现自己越无知 于是就越想知道更多
2006-05-14 19:59
快速回复:[求助]大家来找错误(一个文件留言类)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015417 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved