新微赢技术网
标题:
[求助]大家来找错误(一个文件留言类)
[打印本页]
作者:
lianeh
时间:
2009-11-3 01:56
标题:
[求助]大家来找错误(一个文件留言类)
文件不能读和写,什么原因?
/*题目说明:程序第一次运行时,建立一个名为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;
}
作者:
√金刚石猛男
时间:
2009-11-3 01:56
哪位大哥顶一下
作者:
释放压力
时间:
2009-11-3 01:56
为什么我用nocreate时说不是std::ios的member呢?
作者:
遗失ぜ的ァ美
时间:
2009-11-3 01:56
还有那个noreplace也是,总用不了
作者:
江边人家
时间:
2009-11-3 01:56
你用的是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;
}
作者:
龙龙
时间:
2009-11-3 01:56
没时间看这,不过帮你顶下
作者:
踏浪
时间:
2009-11-3 01:56
不懂这个 不过顶下先
欢迎光临 新微赢技术网 (http://bbs.weiying.cn/)
Powered by Discuz! X3.2