荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: franky (斌), 信区: Program
标  题: Re: 再问一次关于读入数据的问题
发信站: 荔园晨风BBS站 (Sun Apr 16 18:14:35 2006), 站内

对啊,fstream 的 getline 函数非常有用啊。

存储文本方式要和读取的方式一致,这样才正确。

比如:

class A 有 两个成员 int B, string C;

写的时候这样写 :我喜欢用 FILE* pst 写。
for(....)
     fprintf( pst, "%d\t%s\n",D.B,D.c.c_str() );//D 是个A的实例

注意这个格式了,每个实例存储一行,(这个是为什么写进去的时候以\n结尾)每个实例有
两个成员,成员之间用 \t 隔开,必须隔开,要不呢读的时候呢是分不出哪个是哪个的。

好,写完之后我们把她读出来。

还是用 FILE* pst 吧。

vector<A>  vstATmp; //因为你不知道文件里到底存了多少数据,所以用向量
vstATmp.clear();
while( feof(pst))
{
       char szTmp[256]; //不要越界根据你的实际情况可以取大点
       int i;
       fscanf( pst, "%d\t%s\n", &i, szTmp );
       if( strlen(szTmp)==0 )//因为 FILE 函数 feof 的问题,这行必须加的,要不会
             break;          //有问题的,要不你试试,你也许会问,上面不是判断
                             //读道文件尾的情况下了嘛、自己试试。
       vstATmp.resize(vstATmp.size()+1); //增加一个数据
       vstATmp[vstATmp.size()-1].B = i;  //将新数据放在向量的最后一个位置
       vstATmp[vstATmp.size()-1].C = szTmp;
}
呵呵,绝对正确,天天干这种事。


【 在 terryfeng (7UP) 的大作中提到: 】
: 我就是 用fstream读写的,但是出问题了....写没有问题,就是读的时候出错
: 【 在 starsun (法克斯尼) 的大作中提到: 】
: : fstream是可以整个对象读写...比你这个方法好得多...


--

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.92]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店